我说的是第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。我不知道为什么?
如果您能为提供更好的工作方法,我将不胜感激。setTabListener和onTabSelected我也扩展了FragmentActivity到EU4Main或者我只是使用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