Подтвердить что ты не робот

Android. Как изменить активность в одной вкладке

Следующая ситуация: У меня есть TabActivity, например. три вкладки, TabA, TabB, TabC.

В действии (Act_C_1) TabC есть кнопка. Поэтому, если пользователь нажимает на эту кнопку, в TabC должно появиться другое действие (Act_C_2).

Я благодарю вас за любые предложения/идеи.

Мур

UPD:

Вот мой код

TabActivity с тремя действиями:

public class TabScreen extends TabActivity
{
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.tab_menu);

        TabHost tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Resusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        intent = new Intent().setClass(this, SecondActivity.class);

        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("tab_1").setIndicator("Tab1",null).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, ThirdActivity.class);
        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("tab_2").setIndicator("Tab2",null).setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, FourthActivity.class);
        spec = tabHost.newTabSpec("tab_3").setIndicator("Tab3",null).setContent(intent);
        tabHost.addTab(spec);
    }

}

Действие 'Act_C_1' или FourthActivity.java:

public class FourthActivity extends Activity implements OnClickListener
{
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fourth);

        Button BtnWeiter = (Button)findViewById(R.id.BtnWeiter);
        BtnWeiter.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) 
    {                    
        // I also tried to use LocalActivityManager
        // TabActivity parentTabActivity = (TabActivity) getParent();            
        // LocalActivityManager manager = parentTabActivity.getLocalActivityManager();
        // manager.destroyActivity("tab_3", true);
        // manager.startActivity("tab_3", new Intent(this, FourthActivity.class));
        finish();
        startActivity(new Intent(this, FourthActivity.class));            
    }        
}
4b9b3361

Ответ 1

Действия на вкладке можно переключать следующим образом.

Сначала Поясним поток:

  • У нас есть в хосте Tab, активность (скажем, список), из которого нам нужно перейти к следующему действию (например, детали для щелкнутого элемента) на той же вкладке. Для этого мы можем использовать концепцию замены активности. Также установите флажки для выбранной вкладки и другие, зная, что теперь отображаются данные.

  • Когда мы возвращаемся назад, мы должны получить предыдущее действие под одной и той же вкладкой. Для этого вместо повторной замены активности мы можем обновить вкладку, используя выбранный флажок для выбранной вкладки. Также, если флаг для сведений о показах истинен, мы перейдем к списку на той же вкладке, иначе мы перейдем к активности перед tabwidget (обычное использование onBackPressed)

Код может быть следующим.

  • Для перехода от списка к деталям...

(Это может быть в onClickListener)

private OnClickListener textListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        Constants.SHOW_DETAILS = true;
        Intent intent = new Intent(context, DetailsActivity.class);
        replaceContentView("activity3", intent);
        }
};

public void replaceContentView(String id, Intent newIntent) {
    View view = ((ActivityGroup) context)
            .getLocalActivityManager()
            .startActivity(id,
                    newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();
    ((Activity) context).setContentView(view);

}
  • При повторном нажатии мы переопределяем на BackPressed в каждом из Activity под вкладкой, чтобы снова перейти к списку из экрана сведений

    @Override
      public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    if (MathHelper.SHOW_DETAILS) {
        Log.e("back", "pressed accepted");
        Constants.LIST_ACTIVITY = 1;
        Constants.SHOW_DETAILS = false;
        Intent intent = new Intent(this, Tab_widget.class);
        startActivity(intent);
        finish();
      }
     }
    

Самая важная часть здесь Константы .LIST_ACTIVITY = 1; он указывает, на какой вкладке мы находимся. поэтому соответствующие действия будут иметь значение 0,1,2... и т.д.

Снова, чтобы загрузить правильный список (Activty), когда активность вкладки обновлена, мы должны включить это в TabWidget onCreate после создания вкладок

tabHost.setCurrentTab(Constants.LIST_ACTIVITY);

Ответ 2

Просто используйте флаг Intent.FLAG_ACTIVITY_CLEAR_TOP, чтобы заменить действие для необходимой вкладки.

intent = new Intent().setClass(this, YourActivity.class);
spec   = tabHost.newTabSpec("tab1").setIndicator("Tab1",null)
        .setContent(intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
tabHost.addTab(spec);

Ответ 3

Просто добавьте это для всех вкладок:

yourTabHost.getChildAt(0).setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        getTabHost().setCurrentTab(0);
    }
});

Ответ 4

Обработать событие onClick для кнопки

завершить() действие Добавьте метод startActivity для запуска другого действия.

Спасибо