我有一个TabActivity
,其中有3个标签为所有3个标签重复使用相同的Activity
。
我通过额外的(intent.putextras()
)进行区分,我将显示每个标签的内容
现在的问题是,当我们将标签彼此切换时,我通过Intent传递的额外值会出现在第二个标签中。
据我所知,当我们创建FirstTab时,会创建唯一的Activity,因此会根据它绘制内容。
当我们添加secondTab时,存储额外值的意图
并且当我们创建第三个标签时,Intent会覆盖额外的值。
所以当我们切换到第二个标签时,我收到第三个标签额外的值,因此向用户显示错误的内容。
这是代码,
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
?
请帮帮我
感谢您的时间:)
答案 0 :(得分:0)
您需要有3个不同的活动实例。你可以做这样的事情
newIntent1 = new Intent(this, ShowContents.class);
newIntent2 = new Intent(this, ShowContents.class);
newIntent3 = new Intent(this, ShowContents.class);
然后将这3个实例用于3个选项卡。应该没问题。