سؤال

حاولت التنقل بين الأجزاء.لقد حصلت على NewFragment.java مع عمل الجزء الجديد.مشكلتي هي:

كيف أفعل هذا onClickListener يجري NewFragment.java بشكل صحيح؟

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent i = new Intent(getActivity(), NewFragment.class);
        startActivity(i);

    }
});

لعِلمِكَ:هذا من داخل جزء (لا أعرف إذا كان هذا مهمًا).

هل كانت مفيدة؟

المحلول

أضف الكود التالي في وظيفة مستمع النقر،

NextFragment nextFrag= new NextFragment();
getActivity().getSupportFragmentManager().beginTransaction()
             .replace(R.id.Layout_container, nextFrag, "findThisFragment")
             .addToBackStack(null)
             .commit();

السلسلة "findThisFragment" يمكن استخدامه للعثور على الجزء لاحقًا، إذا كنت بحاجة.

نصائح أخرى

هذا رمز أكثر وصفًا لكود @Narendra،

تحتاج أولاً إلى مثيل للجزء الثاني.ثم يجب أن يكون لديك كائنات FragmentManager وFragmentTransaction.الكود الكامل هو كما يلي ،

Fragment2 fragment2=new Fragment2();
FragmentManager fragmentManager=getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_main,fragment2,"tag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

نأمل أن ينجح هذا.في بعض الأحيان قد تحصل على getSupportFragmentManager() بدلاً من getFragmentManager().

يجب عليك إنشاء وظيفة داخل النشاط لفتح جزء جديد وتمرير مرجع النشاط إلى الجزء وفي بعض الأحداث داخل الجزء استدعاء هذه الوظيفة.

@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
    super.onListItemClick(l, v, pos, id);
    UserResult nextFrag= new UserResult();
    this.getFragmentManager().beginTransaction()
    .replace(R.id.content_frame, nextFrag, null)
    .addToBackStack(null)
    .commit();  
}

استخدم هذا،

AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new MyFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
 Fragment fr = new Fragment_class();
             FragmentManager fm = getFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.add(R.id.viewpagerId, fr);
            fragmentTransaction.commit();

فقط لكي نكون دقيقين، R.id.viewpagerId يتم إنشاؤه في تخطيط الفصل الحالي الخاص بك، عند الاتصال، يتم اختراق الجزء الجديد تلقائيًا.

إضافة إلى حلNarendra...

مهم:عند العمل مع الأجزاء، ترتبط عمليات التنقل ارتباطًا وثيقًا بنشاط المضيف، لذلك لا يمكنك الانتقال من جزء إلى جزء دون تنفيذ فئة الجزء تلك في نشاط المضيف.

عينة:

public class MyHostActivity extends AppCompatActivity implements MyFragmentOne.OnFragmentInteractionListener {

تحقق أيضًا من أن نشاط المضيف الخاص بك يحتوي على وظيفة التجاوز التالية:

@Override public void onFragmentInteraction(Uri uri) {} أتمنى أن يساعدك هذا...

حسنًا، كانت مشكلتي هي أنني استخدمت الكود من الإجابة، والذي تم تحديده كحل هنا، ولكن بعد تنفيذ الاستبدال، كانت الطبقة الأولى لا تزال مرئية وتعمل تحت الجزء المفتوح للتو.أضفت أن الحل الخاص بي كان بسيطًا

.remove(CourseListFragment.this)

يعد CourseListFragment ملفًا دراسيًا للجزء الذي حاولت إغلاقه.(MainActivity.java ، ولكن بالنسبة لقسم محدد (شظية درج التنقل) ، إذا كان الأمر أكثر منطقية بالنسبة لك) ، فإن الكود الخاص بي يبدو مثل هذا الآن:

LecturesFragment nextFrag= new LecturesFragment();

                    getActivity().getSupportFragmentManager().beginTransaction()
                            .remove(CourseListFragment.this)
                            .replace(((ViewGroup)getView().getParent()).getId(), nextFrag, "findThisFragment")
                            .addToBackStack(null)
                            .commit();

ويعمل مثل السحر بالنسبة لي.

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