2

我有一个TabActivity其中有 3 个选项卡对所有 3 个选项卡重复使用相同Activity 的选项卡。

我通过 extras( intent.putextras()) 进行区分,我将显示每个选项卡的内容

现在的问题是,当我们相互切换选项卡时,我通过 Intent 传递的额外值对于第二个选项卡来说是错误的。

据我了解,当我们创建 FirstTab 时,创建了唯一的 Activity,因此内容是根据它绘制的。

当我们添加 secondTab 时,意图存储额外的值

当我们再次创建第三个选项卡时,意图覆盖了额外的值。

所以当我们切换到第二个选项卡时,我会收到第三个选项卡的额外值,因此向用户显示错误的内容。

这是代码,

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);               
 }
 }

显示内容.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 作为 extras,与 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 回答