تمرير البيانات إلى جزء من النشاط ، عندما يتم تحميلها جزئيًا مع جزء

لذا فإن مشكلتي هي في الأساس تحميل MainActivity في البداية مع جزء ، والذي سنطلق عليه MyFragment.

أنا أقوم بتحميل JSON ، من الإنترنت وترغب في المرور إلى MyFragment.

تنشأ المشكلة عندما يتم استدعاء setContentView في MainActivity ، فإنه يتم استدعاء onCreateView في MyFragment ، والذي يحتوي على getArguments.getSerializable ("myTag") . لم يتم تمرير المفتاح لأنني لم أحمل JSON بعد.

هل يمكنك مساعدتي في حل هذه المشكلة؟

هنا الكود:

في MyFragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        if(getArguments() != null) {
            coll = (HashSet) getArguments().getSerializable("myTag");
        }
   //Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_my, container, false);
}

MainActivity (افترض أنني حمّلت جهاز JSON الخاص بي بالفعل):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    loadJSON();
    passTagsToFragment(); //passes to the fragment
}

public void passTagsToFragment(){
    Bundle bundle = new Bundle();
    bundle.putSerializable("myTags", tagsSet);
    TagsFragment frag = new MyFragment();
    frag.setArguments(bundle);
}

تصحيح:

أساسا ، مشكلتي هي أنني أريد تحميل MainActivity بشكل كامل ، حتى قبل البدء في تحميل الجزء. غير متأكد من كيفية القيام بذلك.

0
يمكنك إما استدعاء API لجلب JSON من الخادم في الجزء أو يمكنك استخدام مربع حوار تقدم حظر حتى استرداد JSON من الخادم ثم تحميل الجزء باستخدام البيانات.
وأضاف المؤلف Alvin Varghese, مصدر
يمكنك إما استدعاء API لجلب JSON من الخادم في الجزء أو يمكنك استخدام مربع حوار تقدم حظر حتى استرداد JSON من الخادم ثم تحميل الجزء باستخدام البيانات.
وأضاف المؤلف Alvin Varghese, مصدر
يمكنك إما استدعاء API لجلب JSON من الخادم في الجزء أو يمكنك استخدام مربع حوار تقدم حظر حتى استرداد JSON من الخادم ثم تحميل الجزء باستخدام البيانات.
وأضاف المؤلف Alvin Varghese, مصدر
يطلق عليه داخل onActivityCreated() طريقة
وأضاف المؤلف Sava Dimitrijević, مصدر
@ SavaDimitrijević حصلت على نفس الخطأ
وأضاف المؤلف Dave, مصدر
@ SavaDimitrijević حصلت على نفس الخطأ
وأضاف المؤلف Dave, مصدر
@ SavaDimitrijević حصلت على نفس الخطأ
وأضاف المؤلف Dave, مصدر

6 إجابة

loadJSON هو من مصدر على الإنترنت ، لذلك أفترض أنه هو AsyncTask.

أفعل هذا عادةً كتعبير لامدا (kotlin):

loadJSON({passTagsToFragment()})

يجب أن يأخذ loadJSON تعبير لامدا كمعلمة:

loadJSON(private val callback:()->Unit )

وفي AsyncTask :: onPostExecute ، يجب استدعاء معاودة الاتصال:

callback.invoke()

أو فقط

callback()

ثم تأكد من فتح الجزء عند تحميل JSON وتمريره إلى جزء.

حسنًا ، دعني أحاول أن أجعله في جافا.

في AsyncTask الذي يحمل JSON ، ستحتاج إلى واجهة ، على سبيل المثال ،

public interface JSONLoadCallback {
    void loaded();
}

ويأخذ منشئه الواجهة كمعلمة:

class JSONLoader : AsyncTask<....> {
    JSONLoader(JSONLoadCallback callback) {
        _callback = callback;
    }
    @Override
    public void onPostExecute() {
        _callback.loaded();
    }
}

وينفذ نشاطك JSONLoadCallback:

@Override
public void loaded() {
    passTagsToFragment();
}

ويجب أن يمرر نفسه إلى AsyncTask:

JSONLoader(this).executeOnExecutor();

بهذه الطريقة ، يتم تشغيل الدالة المحملة() عند انتهاء تحميل JSON.

ترى ، رموز جافا هي اللفظية للغاية ، إزالة كوتلن تقريبا ضرورة واجهة جافا.

0
وأضاف
ومع ذلك ، لا تفهم شفرتك. أنا أقوم بتشغيل AyncTask ، يمكنك ترجمتها إلى جافا بالنسبة لي.
وأضاف المؤلف Dave, مصدر

loadJSON هو من مصدر على الإنترنت ، لذلك أفترض أنه هو AsyncTask.

أفعل هذا عادةً كتعبير لامدا (kotlin):

loadJSON({passTagsToFragment()})

يجب أن يأخذ loadJSON تعبير لامدا كمعلمة:

loadJSON(private val callback:()->Unit )

وفي AsyncTask :: onPostExecute ، يجب استدعاء معاودة الاتصال:

callback.invoke()

أو فقط

callback()

ثم تأكد من فتح الجزء عند تحميل JSON وتمريره إلى جزء.

حسنًا ، دعني أحاول أن أجعله في جافا.

في AsyncTask الذي يحمل JSON ، ستحتاج إلى واجهة ، على سبيل المثال ،

public interface JSONLoadCallback {
    void loaded();
}

ويأخذ منشئه الواجهة كمعلمة:

class JSONLoader : AsyncTask<....> {
    JSONLoader(JSONLoadCallback callback) {
        _callback = callback;
    }
    @Override
    public void onPostExecute() {
        _callback.loaded();
    }
}

وينفذ نشاطك JSONLoadCallback:

@Override
public void loaded() {
    passTagsToFragment();
}

ويجب أن يمرر نفسه إلى AsyncTask:

JSONLoader(this).executeOnExecutor();

بهذه الطريقة ، يتم تشغيل الدالة المحملة() عند انتهاء تحميل JSON.

ترى ، رموز جافا هي اللفظية للغاية ، إزالة كوتلن تقريبا ضرورة واجهة جافا.

0
وأضاف
ومع ذلك ، لا تفهم شفرتك. أنا أقوم بتشغيل AyncTask ، يمكنك ترجمتها إلى جافا بالنسبة لي.
وأضاف المؤلف Dave, مصدر

loadJSON هو من مصدر على الإنترنت ، لذلك أفترض أنه هو AsyncTask.

أفعل هذا عادةً كتعبير لامدا (kotlin):

loadJSON({passTagsToFragment()})

يجب أن يأخذ loadJSON تعبير لامدا كمعلمة:

loadJSON(private val callback:()->Unit )

وفي AsyncTask :: onPostExecute ، يجب استدعاء معاودة الاتصال:

callback.invoke()

أو فقط

callback()

ثم تأكد من فتح الجزء عند تحميل JSON وتمريره إلى جزء.

حسنًا ، دعني أحاول أن أجعله في جافا.

في AsyncTask الذي يحمل JSON ، ستحتاج إلى واجهة ، على سبيل المثال ،

public interface JSONLoadCallback {
    void loaded();
}

ويأخذ منشئه الواجهة كمعلمة:

class JSONLoader : AsyncTask<....> {
    JSONLoader(JSONLoadCallback callback) {
        _callback = callback;
    }
    @Override
    public void onPostExecute() {
        _callback.loaded();
    }
}

وينفذ نشاطك JSONLoadCallback:

@Override
public void loaded() {
    passTagsToFragment();
}

ويجب أن يمرر نفسه إلى AsyncTask:

JSONLoader(this).executeOnExecutor();

بهذه الطريقة ، يتم تشغيل الدالة المحملة() عند انتهاء تحميل JSON.

ترى ، رموز جافا هي اللفظية للغاية ، إزالة كوتلن تقريبا ضرورة واجهة جافا.

0
وأضاف
ومع ذلك ، لا تفهم شفرتك. أنا أقوم بتشغيل AyncTask ، يمكنك ترجمتها إلى جافا بالنسبة لي.
وأضاف المؤلف Dave, مصدر

يجب عليك استدعاء طريقة passTagsToFragment() الخاصة بك في طريقة التنفيذ اللاحق لخاصية التعليق عندما يتم تحميل جميع بيانات json.

 protected void onPostExecute(Long result) {
     passTagsToFragment();
 }
0
وأضاف
هل يمكنك من فضلك مشاركة كود النشاط_اسم_المختبر وطبقة جافا الخاصة به
وأضاف المؤلف Diwakar Singh, مصدر
نفس الخطأ. في xml الخاص بي ، قمت بإضافة طريقة عرض جزء. لذلك عندما أقوم أولاً بتشغيل التطبيق الخاص بي ، يقوم بتحميل Fragment.java قبل MainActivity.java. ربما هذا سوف يساعد على توضيح الأمور.
وأضاف المؤلف Dave, مصدر

يجب عليك استدعاء طريقة passTagsToFragment() الخاصة بك في طريقة التنفيذ اللاحق لخاصية التعليق عندما يتم تحميل جميع بيانات json.

 protected void onPostExecute(Long result) {
     passTagsToFragment();
 }
0
وأضاف
هل يمكنك من فضلك مشاركة كود النشاط_اسم_المختبر وطبقة جافا الخاصة به
وأضاف المؤلف Diwakar Singh, مصدر
نفس الخطأ. في xml الخاص بي ، قمت بإضافة طريقة عرض جزء. لذلك عندما أقوم أولاً بتشغيل التطبيق الخاص بي ، يقوم بتحميل Fragment.java قبل MainActivity.java. ربما هذا سوف يساعد على توضيح الأمور.
وأضاف المؤلف Dave, مصدر

حسب فهمي ، أولاً. يمكنك استدعاء طريقة Loadjson() على الشظايا أيضًا واستخدام البيانات وفقًا لذلك ولكن إذا كان لديك بعض المنطق المحدد يمكنك استخدام asynctask واسترجاع json مع شريط التقدم يمكنك تعيين أي استدعاء MyFragment وتحديث الجزء الخاص بك وفقًا لذلك.

0
وأضاف
Android Sudan Community
Android Sudan Community
900 مشارك

كل اقتراحاتكم تتم مشاركتها هنا رابط القناة لتنزيل البرامج والالعاب من هنا @android_sudan تنبيه : القروب غير مختص إطلاقا بي الانترنت المجاني مثل ملفات الحاقن وماشابه يمنع منعا باتا نشر اي ملفات او برامج او اي شيء يتعلق بالانترنت المجان