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

我正在实施一些代码(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

以上是 非常基本actionbarsherlock选项卡与片段:FragmentTransaction在null onTabSelected()方法 的全部内容, 来源链接: utcz.com/qa/260911.html

回到顶部