2016-04-28 54 views
0

我有一个活动首先显示<string-array name="main">。这个“主”数组包括两个项目 - >(类别和制造商)。我还在String.xml中定义了<string-array name="Category"><string-array name="Manufacturer">,它们每个都包含五个项目。如何恢复同一活动?

当“类别”项目被点击的项目,如果类别显示,和厂商同样的事情。但是,在这里我遇到了一个问题,例如,如果首先点击“类别”项目,它会显示项目,但我无法再回到包含(类别和制造商)项目的“主”数组。

当我在设备上点击“返回”时,应用程序已关闭,因为我正在使用相同的活动来显示不同的列表。

有没有什么办法可以不创建一个新的活动,让我回去并显示“主”列表与后退选项?

main.java

public class MainActivity extends Activity implements OnItemClickListener{ 

    ListView lv; 
    String [] list; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     lv=(ListView)findViewById(R.id.listView); 
     list=getResources().getStringArray(R.array.main); 

     lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list)); 
     lv.setOnItemClickListener(this); 


    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     switch(lv.getItemAtPosition(position).toString()){ 
     case "Category": 
      list=getResources().getStringArray(R.array.Category); 
      lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list)); 
      break; 

     case "Manufacturer": 
      list=getResources().getStringArray(R.array.Manufacturer); 
      lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list)); 
      break; 


     } 

    } 

} 

String.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string name="app_name">ShaymaTest</string> 
    <string name="hello_world">Hello world!</string> 
    <string name="action_settings">Settings</string> 

    <string-array name="main"> 
     <item >Category</item> 
     <item >Manufacturer</item> 

    </string-array><string-array name="Category"> 
     <item >Category</item> 
     <item >Category</item> 
     <item >Category</item> 
     <item >Category</item> 
     <item >Category</item> 
    </string-array><string-array name="Manufacturer"> 
     <item >Manufacturer</item> 
     <item >Manufacturer</item> 
     <item >Manufacturer</item> 
     <item >Manufacturer</item> 
     <item >Manufacturer</item> 
    </string-array> 

</resources> 
+0

您可以覆盖onBackPressed并让它做你想做的任何事情。另一种可能性是使用碎片。 –

+0

正如其他人建议你可以重写你的onBackPressed来实现你正在寻找的东西。但是我需要告诉你一些事情:不要每次创建新的适配器来更改内容,而应创建一个适配器作为实例变量,并且只更改适配器中的项并调用adapter.notifyDatasetChanged()方法。 –

+0

谢谢@GabeSechan – Doglas

回答

0

可以声明一个变量来了解当前状态和覆盖onBackPressed方法这样

private boolean inSub = false; 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     inSub = true; 
     switch(lv.getItemAtPosition(position).toString()){ 

[.....] 

    @Override 
    public void onBackPressed() { 
     if (inSub){ 
      list=getResources().getStringArray(R.array.main); 
      lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list)); 
      inSub = false; 
     }else{ 
      super.onBackPressed(); 
     } 
    }