لا يمكن إدارة استخدام علامات التبويب مع Sherlock
-
11-12-2019 - |
سؤال
حسنًا، أحاول استخدام Sherlock لعرض علامات تبويب متعددة، كل منها لجزء واحد.لدي 4 فصول فقط:واحد لنشاطي الرئيسي، واثنان لأجزاءي، وواحد لـ TabListener.يجب أن يكون كل شيء على ما يرام (لدي نفس البرنامج تمامًا بدون Sherlcock، ويعمل على أجهزة 4.0)، لذلك لا أستطيع أن أفهم سبب حصولي على NullPointerException.
وهنا جزء من الخطأ
05-18 17:46:57.197: E/AndroidRuntime(9312): FATAL EXCEPTION: main
05-18 17:46:57.197: E/AndroidRuntime(9312): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.micky.testing/com.micky.testing.SherlockTestActivity}: java.lang.NullPointerException
...
05-18 17:46:57.197: E/AndroidRuntime(9312): Caused by: java.lang.NullPointerException
05-18 17:46:57.197: E/AndroidRuntime(9312): at com.micky.testing.MyTabListener.onTabSelected(MyTabListener.java:21)
...
05-18 17:46:57.197: E/AndroidRuntime(9312): at com.micky.testing.SherlockTestActivity.onCreate(SherlockTestActivity.java:39)
هنا واحدة من شظاياي:
جزء رئيسي
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.actionbarsherlock.app.SherlockFragment;
public class HomeFragment extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.homefragment, container, false);
}
}
هنا هو tabListener الخاص بي:
MyTabListener
public class MyTabListener implements TabListener {
public SherlockFragment fragment;
MyTabListener(SherlockFragment fr) {
Log.d("MYTAG", "Creating a fragmentListener w/ " + fr);
this.fragment = fr;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
Log.d("TAG", "" + fragment);
ft.replace(R.id.fragment_container, fragment);
}
}
ونشاطي الرئيسي :
SherlockTestActivity
public class SherlockTestActivity extends SherlockActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//We take the support actionbar
ActionBar ab = getSupportActionBar();
//We set to navigationmode with tabs
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//we create the tabs
ActionBar.Tab homeTab = ab.newTab().setText("Home");
ActionBar.Tab tagsTab = ab.newTab().setText("Tags");
//We create the fragments
SherlockFragment homeFragment = new HomeFragment();
SherlockFragment tagsFragment = new TagFragments();
//And we set the tabsListener;
homeTab.setTabListener(new MyTabListener(homeFragment));
tagsTab.setTabListener(new MyTabListener(tagsFragment));
Log.d("","" + homeTab);
ab.addTab(homeTab);
ab.addTab(tagsTab);
}
حسنًا، يبدو أن الخطأ قد ظهر عندما أقوم بإضافة علامة التبويب إلى شريط الإجراءات الخاص بي.وعندما لا أقوم بإضافة TabListener إلى علامة التبويب، فلا يوجد خطأ.الرمز ft.replace(R.id.fragment_container, fragment);
يبدو أن (MyTabListener) هي المشكلة، لكن لا يمكنني فهم السبب.الجزء ليس فارغًا (تتم تهيئته عند إنشاء tabListener جديد)، ولا يوجد سبب لأن fragment_container خاطئ.
لذلك إذا كان أي شخص يستطيع مساعدتي هنا!شكرًا لك !
المحلول
يجب أن تقوم بتوسيع SherlockFragmentActivity بدلاً من SherlockActivity.استخدم نشاط التجزئة عندما تقوم بإدارة الأجزاء.