我有几个活动,其中一些有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);
}
当我回到activity1时,我希望我的listview能够记住之前的选择并在列表视图中突出显示它。现在,当我使用手机上的导航键时,会记住突出显示...有没有办法模仿它。或者也许有一种更简单的方法。请帮助:)
答案 0 :(得分: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;
... ...
}
最后在你的getView(...)
atapter中添加一行:
if(selectedPos == position)
convertView.setSelected(true);
希望这有帮助!