سؤال

كنت أستخدم حزمة توافق 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 حيثما كان ذلك مناسبا.

نأمل أن يوضح هذا بعض الأسئلة المستقبلية.

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