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ますか?
私を助けてください
御時間ありがとうございます :)