Вкладка AndroidBar на фрагменты / EU4You_6 - PullRequest
0 голосов
/ 26 ноября 2011

Как ты, Марк? У меня есть вопрос, касающийся программы, которую вы написали в книге "CommonsWare. Руководство для занятых программистов по разработке Android".

Я говорю о фрагментах / EU4You_6 на Главе 28, стр. 377. Я хочу расширить это, добавив ActionBar Tab .

Не внося никаких изменений в исходную программу, я скопировал EU4You.java в EU5You.java, который представляет Tab2. EU4You.java будет по умолчанию Tab1.

Вот мой подход:

Я создал java-программу под названием EU4Main.java , которая представляет собой ОСНОВНУЮ программу вместо оригинальной EU4You. Конечно, я изменил манифест на Android: name = " .EU4Main "

EU4Main.java - это место, куда я вкладываю вкладку ActionBar. Беда в том, что я расстроен в настройке TabListener. У меня есть эта установка .setTabListener (новый TabListener (EU4You.class))); , который передает класс. Это не работает. Есть ли у вас какие-либо советы по этому поводу вместо прохождения класса?

Кроме того, onTabSelected в приведенных ниже фрагментах кода не работает должным образом. Если я нажму Tab2, он покажет список для Tab2, но автоматически вернется к Tab1. Это не останется на Tab2. Я не знаю почему?

Буду признателен за любую помощь, если вы сможете обеспечить лучший и рабочий подход для .setTabListener и onTabSelected

Я также расширил FragmentActivity до EU4Main или я должен просто использовать вместо Расширения Activity?

Заранее спасибо.

Я включил EU4Main ниже с неправильными и неполными кодами (я просто не могу заставить его работать ...)

public class EU4Main extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final ActionBar bar = getActionBar();
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

        bar.addTab(bar
                .newTab()
                .setText("Countries")
                .setTabListener(new TabListener(EU4You.class)));

        bar.addTab(bar
                .newTab()
                .setText("Artists")
                .setTabListener(new TabListener(EU5You.class)));
.
.
.
private class TabListener implements ActionBar.TabListener {


public TabListener(Activity activity) {
             mActivity = activity;

        }


  public void onTabSelected(ActionBar.Tab tab, android.app.FragmentTransaction unused) {
          if (tab.getPosition() == 0) {
            Intent intent = new Intent();
                String packageName = "com.commonsware.android.eu4you";
                String className   = "com.commonsware.android.eu4you.EU4You";
                intent.setClassName(packageName, className);
                startActivity(intent);
else{
            Intent intent = new Intent();
                String packageName = "com.commonsware.android.eu4you";
                String className   = "com.commonsware.android.eu4you.EU5You";
                intent.setClassName(packageName, className);
                startActivity(intent);

}

        }


 public void onTabUnselected(ActionBar.Tab tab, android.app.FragmentTransaction unused) {
          FragmentManager fragMgr = getSupportFragmentManager();
          FragmentTransaction xaction=fragMgr.beginTransaction();

        }
     public void onTabReselected(ActionBar.Tab tab,
                                    android.app.FragmentTransaction xaction) {
          // NO-OP
        }
}

1 Ответ

1 голос
/ 26 ноября 2011

Ваш TabListener имеет конструктор, который принимает Activity.Вы вызываете конструктор с Class.Class не является Activity.

. Кроме того, вы используете два отдельных экземпляра TabListener, но ваш код для TabListener не делает ничего другого в зависимости от предоставленного параметра.

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

Когда TabListener вызывается с onTabSelected(), это должно повлиять на изменение к существующему интерфейсу .Начало нового действия не означает изменение существующего пользовательского интерфейса.Скорее, TabListener должен сделать что-то вроде:

  • выполнить FragmentTransaction
  • установить новый ListAdapter в ListFragment, управляемый вкладками
  • обновить обычные виджеты в текущей активности
  • и т. д.
...