2012-10-25 20 views
7

में शून्य है मैं एक उदाहरण से कुछ कोड लागू कर रहा हूं (http://arvid-g.de/12/android-4-actionbar-with-tabs -example) और इसे ActionBarSherlock के साथ काम करने के लिए परिवर्तित करने की कोशिश कर रहा है।टुकड़े के साथ बहुत ही बुनियादी एक्शनबार्सहेलॉक टैब: FragmentTransaction 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() तरीका है। अगर मैंने लॉग में लिखने वाले नल के लिए ऑब्जेक्ट्स की जांच की है और यह दिखाता है कि FragmentTransaction ऑब्जेक्ट शून्य है, तो मैंने एक जोड़ा रखा। कोई भी देखता है कि मैं गलत कहां जा रहा हूं? धन्यवाद।

उत्तर

11

आप अपने गतिविधि बनाना चाहिए SherlockFragmentActivity से SherlockActivity के बजाय का विस्तार उसी तरह आप समर्थन-v4 पैकेज के साथ गतिविधि के बजाय FragmentActivity का प्रयोग करेंगे

कृपया टुकड़ा नमूना यहाँ पर एक नजर है: https://github.com/JakeWharton/ActionBarSherlock/tree/master/actionbarsherlock-samples/fragments