• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

非常基本actionbarsherlock选项卡与片段:FragmentTransaction在null onTabSelected()方法

Android 来源:wuliwong 19次浏览

我正在实施一些代码(http://arvid-g.de/12/android-4-actionbar-with-tabs例如)并试图将其转换为与ActionBarSherlock一起使用。非常基本actionbarsherlock选项卡与片段:FragmentTransaction在null onTabSelected()方法

这里是TabActivity.java:

package com.pnet; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockActivity; 

import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.util.Log; 
import android.widget.Toast; 

public class TabActivity extends SherlockActivity { 

    private static String TAG = "TabActivity"; 
    public static Context appContext; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tab_activity); 

     //ActionBar gets initiated 
     ActionBar actionbar = getSupportActionBar(); 
     //Tell the ActionBar we want to use Tabs. 
     actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     //initiating both tabs and set text to it. 
     ActionBar.Tab PlayerTab = actionbar.newTab().setText("Fragment A"); 
     ActionBar.Tab StationsTab = actionbar.newTab().setText("Fragment B"); 

    //create the two fragments we want to use for display content 
     Fragment PlayerFragment = new AFragment(); 
     Fragment StationsFragment = new BFragment(); 

    //set the Tab listener. Now we can listen for clicks. 
     PlayerTab.setTabListener(new MyTabsListener(PlayerFragment)); 
     StationsTab.setTabListener(new MyTabsListener(StationsFragment)); 

    //add the two tabs to the actionbar 
     actionbar.addTab(PlayerTab); 
     actionbar.addTab(StationsTab); 
    } 

    class MyTabsListener implements ActionBar.TabListener { 
     public Fragment fragment; 

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

     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      if (fragment == null) { 
       Log.v(TAG, "fragment is null"); 
      } 

      if (ft == null) { 
       Log.v(TAG, "fragment TRANSACTION is null"); 
      } 

      ft.replace(R.id.fragment_container, fragment);   
     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 
      Toast.makeText(TabActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show(); 

     } 

    } 
} 

这里是AFragment.java

package com.pnet; 

import com.actionbarsherlock.app.SherlockFragment; 

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class AFragment extends SherlockFragment { 

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

} 

下面是BFragment.java

package com.pnet; 

import com.actionbarsherlock.app.SherlockFragment; 

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class BFragment extends SherlockFragment { 

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

} 

这里是tab_activity.xml:

<LinearLayout android:layout_gravity="center" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> 
<LinearLayout android:id="@+id/fragment_container" android:layout_height="match_parent" android:layout_width="match_parent"> 

</LinearLayout> 
</LinearLayout> 

这里是afragment.xml:

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

    <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:gravity="center_vertical|center_horizontal" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/hello_world"/> 


</LinearLayout> 

这里是bfragment.xml

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

    <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:gravity="center_vertical|center_horizontal" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="@string/tab_navigation_content"/> 


</LinearLayout> 

当活动加载它触发onTabSelected()方法。如果语句检查写入日志的null对象,并且它显示FragmentTransaction对象为null,那么我就放了一对。任何人都可以看到我要去哪里?谢谢。

===========解决方案如下:

你应该让你的活动延长从SherlockFragmentActivity而不是SherlockActivity你将与支持-V4包中使用,而不是活动FragmentActivity以同样的方式

请看看该片段样品在这里:https://github.com/JakeWharton/ActionBarSherlock/tree/master/actionbarsherlock-samples/fragments


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)