جزء حزمة توافق Android كفئة ثابتة داخلية
-
27-10-2019 - |
سؤال
كنت أستخدم حزمة توافق Android ولكني واجهت المشكلة التالية، يبدو أنه عندما أقوم بإنشاء جزء كفئة ثابتة داخلية في تطبيقي وأحاول بدء هذا النشاط فإنه يعرض الخطأ التالي
android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment org.wr.CreditCardHolderActivity.CreditCardHolderFragment: make sure class name exists, is public, and has an empty constructor that is public
وعندما أفصل الجزء عن النشاط، كل شيء يعمل بسلاسة، هل يعرف أحد لماذا؟وكيف يمكنني إصلاحه؟
شكرًا!
المحلول
إذا كان لديك جزء من الطبقة الداخلية مثل:
public class SomethingFragment extends Fragment {
public static final class TypeFragment extends BaseFragment
{
public static Fragment newInstance()
{
return new TypeFragment();
}
private View mRootView;
private ListView mListView;
/**
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
* android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
mRootView = inflater.inflate(R.layout.fragment_category_list, container, false);
mListView = (ListView) mRootView.findViewById(R.id.fragment_listview);
return mRootView;
}
}
}
تأكد من المؤهل الخاص بك عام عندما يحاول FragmentActivity إعادة بدء الجزء، فإنه لا يستدعيه من الفئة المحددة، بل سيتعامل معه من FragmentActivity المجرد، وإذا كان جزء الفصل الداخلي الخاص بك خاصًا، فلن يحتوي النشاط على إشارة إلى onSaveState، أو onRestoreState، أو التهيئة وما إلى ذلك.
private
ل public
إصلاحه بالنسبة لي!
تحديث:
القي نظرة على https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v4/java/android/support/v4/app/Fragment.java
ال instantiate
استدعاءات الطريقة newInstance()
عند محاولة استعادة Fragment
من الحالة المحفوظة (حيث تم تدمير الجزء بالكامل).
ال newInstance
تتطلب الطريقة أن يكون الفصل متاحًا للعامة، لذلك عند تعريفه كفئة داخلية، فهذا يعني أنه يجب أن يكون كذلك public
و static
حيثما كان ذلك مناسبا.
نأمل أن يوضح هذا بعض الأسئلة المستقبلية.