Как использовать одну и ту же активность для 3 разных вкладок в TabActivity с разными входами - PullRequest
2 голосов
/ 11 февраля 2011

У меня есть TabActivity, в котором есть 3 вкладки, повторно использующие одинаковые Activity для всех 3 вкладок.

Я различаюсь с помощью дополнительных функций (intent.putextras()), которые я должен отображать содержимоекаждая вкладка

Теперь проблема в том, что когда мы переключаем вкладку друг от друга, дополнительные значения, которые я пропустил через Намерение, не подходят для второй вкладки.

Как я понял, когда мы создали FirstTab, создается единственное действие, и поэтому содержимое рисуется в соответствии с ним.

, когда мы добавляем secondTab намерение, хранящее дополнительное значение

, и снова, когда мы создаем третью вкладку, Intent over- записываем дополнительное значение.

, поэтому, когда бы мы ни переключались на 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?

Пожалуйста, помогите мне

Спасибо за ваше время:)

1 Ответ

0 голосов
/ 11 февраля 2011

Вам нужно иметь 3 разных экземпляра действия.Вы можете сделать что-то вроде этого

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

Затем использовать эти 3 экземпляра для 3 вкладок.Должно быть хорошо, как это.

...