2015-04-06 83 views
0

我有几个活动,其中一些有listviews。当点击那些列表视图中的项目时,背景和文本颜色将突出显示,并且下一个活动将启动。我有自定义后退按钮可以回到以前的活动。我想知道是否有一种方法可以保留先前按下的listview中背景和文本颜色的亮点,当我点击后退按钮时。这里是一个示例代码:记住选定的背景和文字颜色突出显示活动

public class Act1 extends Activity { 
//code to create arrays and adapters, populate listview and so on 
ListView listParams = (ListView) findViewById(R.id.lvParams); 
listParams.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent,View viewClicked, int position, long id) { 
        viewClicked.setSelected(true); 
        SelectedParam = String.valueOf(parent.getItemAtPosition(position)); 
        Editor editor = sharedpreferences.edit(); 
        editor.putString("SelectedParam", SelectedParam); 
        editor.commit(); 
        Intent goToAct2= new Intent(getApplicationContext(),Act2.class); 
        startActivity(goToAct2); 
       } 
      }); 

我有xml选择器来更改所选项目的颜色(此处未显示...)。现在,当我在第二个活动,我想回去的第一个活动,所以我连接功能的GoBack的按钮:

goBack(View V){ 
    Intent goToAct1 = new Intent(Act2.this, Act1.class); 
    startActivity(goToAct1); 
} 

当我回来活性1,我想我的列表视图来记住以前的选择并在列表视图中突出显示它。现在,当我在手机上使用导航键时,突出部分被记住了......有没有办法模仿这种情况。或者也许有一个更简单的方法。请帮助:)

+0

是的,您可以在返回活动时更改listitem布局的背景颜色。您已经存储了listitem的值。存储ID将非常有益。 – Aakash 2015-04-06 01:35:02

+0

'startActivityForResult(Intent intent,int requestCode)'可以解决你的问题。 – li2 2015-04-06 01:48:43

+0

您的第一个活动已存储在** [back stack](http://developer.android.com/guide/components/tasks-and-back-stack.html)**中,所以当您想要导航回activity1从activity2开始,你只需要完成activity2,如果你按下了actionbar的后退按钮或其他与你的** goback按钮相关的函数,你可以重写onNavigateUp()方法** – li2 2015-04-06 01:59:50

回答

0

使用onSavedInstanceState(...)保存选定的位置:

private static int selectedPos = -1; 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("selected", selectedPos); 

} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    selectedPos = savedInstanceState.getInt("selected"); 

} 

//get seleted position when click item 
@Override 
public void onItemClick(AdapterView<?> parent,View viewClicked, int position, long id) { 
        ... ... 
        selectedPos = position; 
        ... ... 
       } 

最后,在你的atapter的getView(...),加台词:

if(selectedPos == position) 
     convertView.setSelected(true);  

希望这有助于!

+0

感谢您的回答。你是什​​么意思getView适配器?我没有那个功能..我用我的适配器填充: adapterParams = new ArrayAdapter (this,R.layout.text1,R.id.text1_name,Params); listParams.setAdapter(adapterParams); – 2015-04-07 14:29:16

+0

您的ListView的适配器,这是自定义的ArrayAdapter,需要重写'getView(...)' – Xcihnegn 2015-04-07 15:32:07

+0

@Andre Bounames你的问题,这个答案解决或帮助它 – Xcihnegn 2015-04-21 06:31:40

相关问题