2

TabActivity3 つのタブすべてで同じものを再利用する3 つのタブがActivity あります。

intent.putextras()各タブの内容を表示するextras( ) を使用して区別しています

問題は、タブを互いに切り替えると、インテントを通過した余分な値が2番目のタブで間違っていることです。

FirstTab を作成したときにわかったように、唯一のアクティビティが作成され、コンテンツはそれに従って描画されます。

secondTab を追加すると、余分な値を格納するインテント

そして再び、3 番目のタブを作成するときに、インテントが追加の値を上書きします。

そのため、2 番目のタブに切り替えるたびに、3 番目のタブの余分な値を受け取っているため、ユーザーに間違ったコンテンツが表示されます。

ここにコードがあります、

public class ContentsTab extends TabActivity implements OnTabChangeListener{

public static final String _ID = "_id";
public static final int ID_1 = 1;
public static final int ID_2 = 2;
public static final int ID_3 = 4;

private TabHost mTabHost;
private static Intent newIntent;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);     

newIntent = new Intent(this, ShowContents.class);

mTabHost = getTabHost();

    newIntent.putExtra(_ID, ID_1);
mTabHost.addTab(mTabHost.newTabSpec(INT_EXT_MEM)
            .setContent(newIntent)
            .setIndicator("one"));

    newIntent.putExtra(_ID, ID_2);
    mTabHost.addTab(mTabHost.newTabSpec(EXT_MEM)                
            .setIndicator("two")
            .setContent(newIntent));

    newIntent.putExtra(_ID, ID_3);
    mTabHost.addTab(mTabHost.newTabSpec(INT_MEM)
            .setContent(newIntent)
            .setIndicator("three"));

    mTabHost.setCurrentTabByTag("one");

    mTabHost.setOnTabChangedListener(this);
}

@Override
public void onTabChanged(String tabId) {
    //This is only coming once the Tab is changed
    Log.d(TAG, "onTabChanged arg0 = "+tabId);               
 }
 }

showcontents.class

public class ShowContents extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);     

    Bundle extras = getIntent().getExtras();

    int mId_ContentType;

    mId_ContentType = extras != null? extras.getInt(_ID): -1;

    updateData(mId_ContentType);

  }
 }

この図では、ユーザーが tab1 を押すと、ShowContents.class はエクストラとして 1 を受け取る必要があり、tab2 および tab3 と同じですが、次の値が受信されます Tab1 - 1 Tab2 - 4(正しい値は 2 である必要があります) Tab3 - 4

Tab1 と Tab3 の値が正しくなります。

正しい追加パラメーターを Tab2 に送信する代替手段はありますか? 同じクラスを使用していActivityますか?

私を助けてください

御時間ありがとうございます :)

4

1 に答える 1

0

アクティビティの 3 つの異なるインスタンスが必要です。このようなことができます

newIntent1 = new Intent(this, ShowContents.class);
newIntent2 = new Intent(this, ShowContents.class);
newIntent3 = new Intent(this, ShowContents.class);

次に、これら 3 つのインスタンスを 3 つのタブに使用します。このままでいいはず。

于 2011-02-11T09:57:55.527 に答える