如何恢复同一活动?
问题描述:
我有一个活动首先显示<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>
答
可以声明一个变量来了解当前状态和覆盖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();
}
}
您可以覆盖onBackPressed并让它做你想做的任何事情。另一种可能性是使用碎片。 –
正如其他人建议你可以重写你的onBackPressed来实现你正在寻找的东西。但是我需要告诉你一些事情:不要每次创建新的适配器来更改内容,而应创建一个适配器作为实例变量,并且只更改适配器中的项并调用adapter.notifyDatasetChanged()方法。 –
谢谢@GabeSechan – Doglas