AndroidBar标签上的碎片/EU4You_6


你好吗?我有一个关于你在《CommonsWare the Busy Coders Guide to Android Development》一书中所写的程序的问题。

我说的是第28章377页的Fragments/EU4You_6。我想通过添加ActionBar选项卡来扩展它。

我没有对您的原始程序做任何更改,我所做的是将eu4u .java复制到eu5u .java中,eu5u .java表示Tab2。java将是默认的Tab1。

以下是我的方法:

我创建了一个名为EU4Main.java的java程序,它代表MAIN程序而不是原来的EU4You。当然,我将清单更改为android:name="。EU4Main "

EU4Main.java是我放置ActionBar选项卡的地方。问题是,让我沮丧的是在TabListener设置。我有这个设置。setTabListener(new TabListener(eu4u . Class)));,传递一个Class。但没有成功。你有什么建议,而不是传递一个类?

同样,下面代码片段上的onTabSelected不能正常工作。如果我单击Tab2,它将显示Tab2的列表,但它将自动返回到Tab1。它不会停留在表2。我不知道为什么?

如果您能为提供更好的工作方法,我将不胜感激。setTabListeneronTabSelected

我也扩展了FragmentActivityEU4Main或者我只是使用extends Activity代替?

提前感谢。

我在下面包含了不正确和不完整的代码(我只是不能使它工作…)

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

您的TabListener有一个接受Activity的构造函数。您正在使用Class调用构造函数。Class不是Activity

此外,您正在使用两个单独的TabListener实例,但是您的TabListener代码不会根据提供的参数做任何不同的事情。

并且,当选项卡被选中时,您正在启动活动,这将不是特别有用。

当使用onTabSelected()调用TabListener时,它需要影响对现有UI的更改。启动一个全新的活动并不构成对现有UI的更改。相反,TabListener应该这样做:

  • execute a FragmentTransaction
  • 在标签
  • 管理的ListFragment中设置一个新的ListAdapter
  • 更新当前活动中的普通小部件
  • 等。

最新更新