假设我已经显示了3个项目的列表视图(比如lv1)。当点击其中任何一个时,我得到新的列表视图(比如lv2)。再次点击其中一个我得到另一个视图。现在,当我单击后退按钮时,我想返回上一个列表视图,即lv2,再次按下后退按钮时,我想显示列表视图lv1。任何人都可以告诉我如何做到这一点?
答案 0 :(得分:1)
你在这里描述的内容在Android Activity生命周期中是显而易见的,因为当你点击后退按钮时它会完成当前的Activity并在Stack上显示最顶层的Activity。所以请解释一下你在这里遇到的问题。
答案 1 :(得分:1)
如果您想在一个活动中实现此功能。使用变量指示当前应显示哪个列表视图。类似的东西:
每次点击某个项目时都会 private int listIndex=0;
:listIndex++;
并致电setContentView(lvX);
以显示新的列表视图。
覆盖onBackPress()
方法:
if(listIndex>0) *so at the first listView backbutton will be ignored */
listIndex--;
switch(listIndex) {
case 0:
setContentView(lv0); break;
/* some other cases*/
........}
像这样。
编辑:我测试了我的方法。实际上,有三种方法可以刷新listView。package viewTest.example;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.AdapterView.OnItemClickListener;
public class ViewTestActivity extends Activity {
private ArrayAdapter<String> adapter0;
private ArrayAdapter<String> adapter1;
private String[] array0;
private String[] array1;
private ListView lv0;
private ListView lv1;
private RelativeLayout layout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
array0 = getResources().getStringArray(R.array.LV0);
array1 = getResources().getStringArray(R.array.LV1);
adapter0 = new ArrayAdapter<String>(this, R.layout.item, array0);
adapter1 = new ArrayAdapter<String>(this, R.layout.item, array1);
lv0 = new ListView(this);
lv1 = new ListView(this);
layout=(RelativeLayout)findViewById(R.id.layout);
lv0.setAdapter(adapter0);
lv1.setAdapter(adapter1);
lv0.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
//Method1: change the adapter to refresh the listview
// lv0.setAdapter(adapter1);
//Method2: use the layout to remove and add views
// layout.removeAllViews();
// layout.addView(lv1);
//Method3: setContentView() directly;
setContentView(lv1);
}
});
// layout.addView(lv0);
setContentView(lv0);
}
}
答案 2 :(得分:0)
如果显示第二个列表视图,您可以将一些布尔值设置为true。按下后退按钮时,查看布尔值并将listView更改为第一个。
答案 3 :(得分:0)
作为一种干净整洁的方法,您希望在背面显示的每个屏幕都应该在活动堆栈上,因此对于每个此类视图,即使它们具有相同的UI组件,也会启动新活动。 如果这种方法不适合保存导航中每个可见实体的数据,他们会根据需要通过overRiding onBackPress()重置视图。