سؤال

حسنًا، أحاول استخدام 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.استخدم نشاط التجزئة عندما تقوم بإدارة الأجزاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top