У меня возникли проблемы с использованием ListActivity внутри TabHost. Я хочу использовать только один класс для отображения разных списков (которыми я управляю), но проблема в том, что когда я нажимаю на новую вкладку, список не обновляется / не заполняется. Я нашел один способ решить эту проблему - создать дублированные классы (Listclass1.java, Listclass2.java ...). На самом деле не очень хорошая практика кодирования.
Вот некоторые из моих кодов tabhost:
intent = new Intent().setClass(this, ListCreator.class);
intent.putExtra("NAME", "abilities");
this.addTab("", R.drawable.abilities, intent);
intent = new Intent().setClass(this, ListCreator.class);
intent.putExtra("NAME", "map");
this.addTab("", R.drawable.map_rules, intent);
А вот Listclass:
package no.heroclix.rules;
import heroclix.Rules.R;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class ListCreator extends ListActivity {
private String NAME;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
NAME = getIntent().getExtras().getString("NAME");
Log.d("List", NAME);
final String[] rules;
if(NAME.equals("abilities")) rules = getResources().getStringArray(R.array.abilities_names);
else if(NAME.equals("map")) rules = getResources().getStringArray(R.array.map_rules_names);
else if(NAME.equals("objects")) rules = getResources().getStringArray(R.array.objects_names);
else if(NAME.equals("ata")) rules = getResources().getStringArray(R.array.ata_names);
else if(NAME.equals("feats")) rules = getResources().getStringArray(R.array.feats_names);
else rules = getResources().getStringArray(R.array.bfc_names);
setListAdapter(new ArrayAdapter<String>(this, R.layout.listrow, rules));
ListView lw = getListView();
lw.setTextFilterEnabled(true);
lw.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, View v, int position,
long id) {
Intent myIntent = new Intent(getApplicationContext(), ListInfo.class);
myIntent.putExtra("NAME", NAME);
myIntent.putExtra("POSITION", position);
myIntent.putExtra("SIZE", rules.length);
startActivityForResult(myIntent, 0);
}
});
}
}
Есть какие-нибудь подсказки?
Редактировать: я должен упомянуть, что это работало некоторое время (не используя дублированные классы), но после внесения некоторых изменений (которые я удалил) оно больше не работает.