如何使用后退按钮显示上一个列表视图

时间:2011-11-04 07:46:57

标签: android listview

假设我已经显示了3个项目的列表视图(比如lv1)。当点击其中任何一个时,我得到新的列表视图(比如lv2)。再次点击其中一个我得到另一个视图。现在,当我单击后退按钮时,我想返回上一个列表视图,即lv2,再次按下后退按钮时,我想显示列表视图lv1。任何人都可以告诉我如何做到这一点?

4 个答案:

答案 0 :(得分:1)

你在这里描述的内容在Android Activity生命周期中是显而易见的,因为当你点击后退按钮时它会完成当前的Activity并在Stack上显示最顶层的Activity。所以请解释一下你在这里遇到的问题。

答案 1 :(得分:1)

  1. 如果您想在不同的活动中显示不同的列表视图。按照Shailendra Rajawat的指南。每次单击某个项目时,都会启动一个新的活动。因此,默认情况下,按后退按钮时,将显示上一个活动。
  2. 如果您想在一个活动中实现此功能。使用变量指示当前应显示哪个列表视图。类似的东西:

    每次点击某个项目时都会

    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*/
    
    ........}
    
  3. 像这样。

    编辑:我测试了我的方法。实际上,有三种方法可以刷新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()重置视图。