java - 在 ActionBarSherlock 的 NavigationTab 示例中使用 fragment

标签 java android actionbarsherlock

我试图使 ActionBarSherlock 中的 TabNavigation 示例能够转到不同的 fragment ,而不仅仅是更改 textView 的文本(正如我们在本示例中所做的那样)。这是我的代码:

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;

import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.view.MenuItem;
import android.widget.Toast;

public class TestNavigation extends SherlockActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (int i = 1; i <= 3; i++) {
            ActionBar.Tab tab = getSupportActionBar().newTab();
            tab.setText("Tab " + i);
            SherlockFragment PlayerFragment = new PhotosActivity();
            tab.setTabListener(new MyTabsListener(PlayerFragment));
            getSupportActionBar().addTab(tab);
        }
    }

    class MyTabsListener implements ActionBar.TabListener {
        public SherlockFragment fragment;

        public MyTabsListener(SherlockFragment fragment) {
            this.fragment = fragment;
        }

        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            Toast.makeText(getApplicationContext(), "Reselected!", Toast.LENGTH_LONG).show();   
        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            ft.replace(R.id.fragment_container, fragment);
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            ft.remove(fragment);
        }   
     }

和main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_gravity="center">
    <LinearLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

 </LinearLayout>
</LinearLayout>

photoActivity 非常简单:

public class PhotosActivity extends SherlockFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.photos_layout, container, false);
    }   
}

你能帮我吗?

如果您认为我的方法不对,请给我一些我可以遵循的示例或教程。

最佳答案

更改您的 Activity 以扩展 SherlockFragmentActivity 而不是 SherlockActivity 还有一件事是将 ft.replace(R.id.fragment_container,fragment); 移动到 onTabSelected(Tab tab, FragmentTransaction ft) 方法,我不认为您需要 onTabReselected() 内的 ft.remove(fragment); 因为如果在选择选项卡时按下选项卡,它将删除您的 fragment

关于java - 在 ActionBarSherlock 的 NavigationTab 示例中使用 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14083982/

相关文章:

Android:Sherlock 操作栏下拉

android - Greendroid 或 ActionbarSherlock - 设置

java - 套接字不打印数据

android - 如何在sqlite3中添加上标

java - Android Volley 服务器 XML 请求

android - 聚类 - 如何处理具有相同位置的标记?

android - 找不到与给定名称 Theme.Sherlock.Dialog 匹配的资源

java - Maven-单元配置文件中无法识别 Pom.xml 属性

带有 Firebase 和 Google App 引擎的 Java 服务器

java - 在 Java TimerTask 中连续无延迟地运行任务