Проблема с использованием дублированного класса в TabHost - PullRequest
0 голосов
/ 25 апреля 2011

У меня возникли проблемы с использованием 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);
            }

        });
    }
}

Есть какие-нибудь подсказки?

Редактировать: я должен упомянуть, что это работало некоторое время (не используя дублированные классы), но после внесения некоторых изменений (которые я удалил) оно больше не работает.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

Как насчет TabHost.OnTabChangeListener ?

«Определение интерфейса для обратного вызова, вызываемого при изменении табуляции». Вы можете использовать это для обновления вкладок при переключении между ними.

0 голосов
/ 26 апреля 2011

Если я правильно понимаю, вам не нужно расширять ListActivity, и вы пытаетесь сделать что-то вроде Реализуемо ли это на Android?

...