اذهب إلى المحتوى
  • 0

كيفية الانتقال من Bottom Navigation Bar الى Activity

Flutter Dev

السؤال

السلام عليكم ورحمة الله وبركاته 

انا استخدم  ازار Bottom Navigation Bar في الصفحة الاساسيه لمشروعي 

لدي 3 ازار وكل زر مرتبط ب صفحة Fragment  من خلال صفحة الادبتر التاليه :

public class PageAdapter extends FragmentPagerAdapter {

    private int numOfTabs;

    PageAdapter(FragmentManager fm, int numOfTabs) {
        super(fm);
        this.numOfTabs = numOfTabs;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new FragmentHome();
            case 1:
                return new StatusFragment();
            case 2:
                return new CallFragment();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return numOfTabs;
    }
}

 

 

 الان لدي مشكلة انا احتاج ان انتقال من خلال الزر الى صفحة activity وليس Fragment 

كل ما حاولت اكتب الكود الانتقال تظهر لي رسالة الخطاء التالي  :

159112388176511.png

في هذا الحالة كيف ممكن نعمل انتقال الى هذا الاكتفتي ؟هل يوجد حل بدون تحويل الاكتفتي الى صفحة Fregment?

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

@مروان مروان3 

لم أنتنبه إلى الكلاس الخاص بك هنا 

extends FragmentPagerAdapter

أعتقدت إنها تستخدم activity على كل حال لحل المشكلة

new Intent()

يتطلب context وليس Activity ,نقوم بتمرير الcontext إلى الPageAdapter هكذا 

 

 PageAdapter(Context context,FragmentManager fm, int numOfTabs) {
        super(fm);
   	this.mContext = context;
        this.numOfTabs = numOfTabs;
    }

ونقوم بإستخدام ال context في  ال intent هكذا 

Intent intent = new Intent(this.mContext, Home.class);

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 30 دقائق مضت قال Hamada Sayed:

عليكم السلام

 

ممكن تستخدم startActivity وreturn null

اذا كنت تقصد كالتالي اخي فهو لم ينجح 

   startActivity(new Intent(PageAdapter.this, Home.class));
                return null ; 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

السلام عليكم أخي @مروان مروان3

الأمر بسيط :) ,يمكنك ذلك هكذا 

 

Intent i = new Intent(getActivity(), Home.class);
    startActivity(i);
    ((Activity) getActivity()).overridePendingTransition(0, 0);

أو عمل فنكشن وإستدعائها  مثال 

private void moveToNewActivity () {

    Intent i = new Intent(getActivity(), Home.class);
    startActivity(i);
    ((Activity) getActivity()).overridePendingTransition(0, 0);

}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

@Mohamd Imran

ايضا لا يمكن عمل ذلك 

 

15911298479121.png

 

 

 

public class PageAdapter extends FragmentPagerAdapter {

    private int numOfTabs;

    PageAdapter(FragmentManager fm, int numOfTabs) {
        super(fm);
        this.numOfTabs = numOfTabs;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new MHome();
            case 1:

                Intent i = new Intent(getActivity(), Home.class);
                startActivity(i);
                ((Activity) getActivity()).overridePendingTransition(0, 0);

               // return new StatusFragment();
               // startActivity(new Intent(PageAdapter.this, Home.class));
             //   return null ;

            case 2:
                return new CallFragment();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return numOfTabs;
    }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

@Mohamd Imran

 

اصبح الكود الصفحة كالتالي 

public class PageAdapter extends FragmentPagerAdapter {
    private static Context mContext;
    private int numOfTabs;
    PageAdapter(Context context, FragmentManager fm, int numOfTabs) {
        super(fm);
        this.mContext = context;
        this.numOfTabs = numOfTabs;
    }



   
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new MHome();
            case 1:
                Intent intent = new Intent(this.mContext, Home.class);
           
          mContext. startActivity(intent);
  

            case 2:
                return new CallFragment();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return numOfTabs;
    }
}

ولكن في الصفحة الاساسيه ظهر خطاء في السطر التالي 

pageAdapter = new PageAdapter(getSupportFragmentManager(), tabLayout.getTabCount());

الخطاء هو 

'PageAdapter(android.content.Context, androidx.fragment.app.FragmentManager, int)' in 'com.example.myapplication.MainTable.PageAdapter' cannot be applied to '(androidx.fragment.app.FragmentManager, int)'

بتحديد في كلمة getSupportFragmentManager()

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ منذ ساعة مضت قال مروان مروان3:

بتحديد في كلمة getSupportFragmentManager()

سبب الخطأ في إننا أضفنا context ل PageAdapter لكن في الصفحة الأخرى التي يظهر فيها الخطأ لم نمرر ال context هناك بما إننا نستخدم ال pageadapter هناك أيضا ,لحل المشكلة قم بتمرير الcontext في الصفحة التي يظهر فيها الخطأ هكذا 

pageAdapter = new PageAdapter(mContext,getSupportFragmentManager(), tabLayout.getTabCount());

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...