rexo

پیاده سازی دکمه برگشت در فرگمنت

6 ارسال در این موضوع قرار دارد

سلام به همگی...

مسقیم میرم سر اصل مطلب:

من داخل یکی از فرگمنتهایی که پیاده سازی کردم، یک دکمه قرار دادم که با زدن اون یک layout رو با دستور:

layout.setVisibility(View.VISIBLE);

نمایش میدم، حالا میخوام با زدن دکمه برگشت این layout بسته بشه ولی متد onBackPressed رو نمیشه توی فرگمنت پاده سازی کرد!!!!

چجوری میتونم این کار رو انجام بدم؟!!!

ممنون از راهنماییتون.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

متد OnBackPressed روی اکتیویتی پیاده سازی میشود

با این روش میتوانید مشکل رو حل کنید

 

1-یک کلاس interface ایجاد کنید

public interface OnBackPressedListener {
    public void doBack();
}

2-در این مرحله یک کلاس ایجاد کنید برای مدیریت back که در ادامه برای فرگمنت مورد استفاده قرار میگیرد

public class BaseBackPressedListener implements OnBackPressedListener {
    private final FragmentActivity activity;

    public BaseBackPressedListener(FragmentActivity activity) {
        this.activity = activity;
    }

    @Override
    public void doBack() {
        activity.getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
}

3- در داخل اکتیویتی زیر کلاس زیر را فراخوانی کنید

protected OnBackPressedListener onBackPressedListener;

4-در متد OnBackPressed کلاس onBackPressed را برای کلید back قرار میدهیم

@Override
public void onBackPressed() {
    if (onBackPressedListener != null)
        onBackPressedListener.doBack();
    else
        super.onBackPressed();

5- در مرحله آخر درداخل فرگمنت کلید back را که در اکتیویتی ایجاد کرده بودیم را به فرگمنت ارجاع میدهیم

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    activity = getActivity();

    ((BaseActivity)activity).setOnBackPressedListener(new BaseBackPressedListener(activity));

    View view = ... ;
//stuff with view

    return view;
}

 

 

1 کاربر پسند دیده است

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 44 دقیقه قبل، Farzad Sarseifi گفته است :

متد OnBackPressed روی اکتیویتی پیاده سازی میشود

با این روش میتوانید مشکل رو حل کنید

 

1-یک کلاس interface ایجاد کنید


public interface OnBackPressedListener {
    public void doBack();
}

2-در این مرحله یک کلاس ایجاد کنید برای مدیریت back که در ادامه برای فرگمنت مورد استفاده قرار میگیرد


public class BaseBackPressedListener implements OnBackPressedListener {
    private final FragmentActivity activity;

    public BaseBackPressedListener(FragmentActivity activity) {
        this.activity = activity;
    }

    @Override
    public void doBack() {
        activity.getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
}

3- در داخل اکتیویتی زیر کلاس زیر را فراخوانی کنید


protected OnBackPressedListener onBackPressedListener;

4-در متد OnBackPressed کلاس onBackPressed را برای کلید back قرار میدهیم


@Override
public void onBackPressed() {
    if (onBackPressedListener != null)
        onBackPressedListener.doBack();
    else
        super.onBackPressed();

5- در مرحله آخر درداخل فرگمنت کلید back را که در اکتیویتی ایجاد کرده بودیم را به فرگمنت ارجاع میدهیم


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    activity = getActivity();

    ((BaseActivity)activity).setOnBackPressedListener(new BaseBackPressedListener(activity));

    View view = ... ;
//stuff with view

    return view;
}

 

 

سلام

مرسی از پاسختون من تمام کارهایی که گفتید رو پیاده سازی کردم ولی متاسفانه نتیجه ای نداد!!!

همون عمکرد سابق رو داشت وقتی دکمه برگشت رو میزدم

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

حتما باید توجه کنید داشته باشید دستور

 super.onBackPressed();

را بعد از چک کردن دستوری که میخواهید اجرا شود قرار دهید

 

 

 

1 کاربر پسند دیده است

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ارسال شده در (ویرایش شده)

در 39 دقیقه قبل، rexo گفته است :

سلام

مرسی از پاسختون من تمام کارهایی که گفتید رو پیاده سازی کردم ولی متاسفانه نتیجه ای نداد!!!

همون عمکرد سابق رو داشت وقتی دکمه برگشت رو میزدم

سلام، اطلاعاتی که جناب مهندس سرسیفی ارائه کردن کاملا درست هست و حدس من اینه که شما به نسبت نیازتون کدها رو تغییر ندادید...

که البته این کار نیاز به مقداری تجربه و دانش در زمینه برنامه نویسی داره، من خودم از همین دستور العمل استفاده میکنم البته با اندکی تغییر، مثلا در کلاس BaseBackPressedListener میتونید متد doBack رو به شکل زیر تغییر بدید:

@Override
public void doBack (){
  if (!activity.getSupportFragmentManager().popBackStackImmediate()){
    activity.supportFinishAfterTransition();
    }
  }

در کلاس MainActivity باید متد setOnBackPressedListener رو پیاده سازی کنید، که به این صورت میتونید این کار رو انجام بدید:

public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener){
this.onBackPressedListener = onBackPressedListener;
}

و بعد با استفاده کردن از یه متد در کلاس فرگمنت عمل پیاده سازی دکمه برگشت رو انجام‌بدید:

public void manageOnBackPressed (){
  ((MainActivity) getActivity()).setOnBackPressedListener(new BaseBackPressedListener(getActivity()){
      @Override 
      public void doBack(){
         if (/*what ever*/){
             //what ever
             } else {
             super.doBack();
             }
  }

و بعد در بخش onCreateView مربوط به فرگمنت متد ()manageOnBackPressed رو قرار بدید...

ویرایش شده در توسط شاهرخ جهان زاده
1 کاربر پسند دیده است

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 1 ساعت قبل، شاهرخ جهان زاده گفته است :

سلام، اطلاعاتی که جناب مهندس سرسیفی ارائه کردن کاملا درست هست و حدس من اینه که شما به نسبت نیازتون کدها رو تغییر ندادید...

که البته این کار نیاز به مقداری تجربه و دانش در زمینه برنامه نویسی داره، من خودم از همین دستور العمل استفاده میکنم البته با اندکی تغییر، مثلا در کلاس BaseBackPressedListener میتونید متد doBack رو به شکل زیر تغییر بدید:


@Override
public void doBack (){
  if (!activity.getSupportFragmentManager().popBackStackImmediate()){
    activity.supportFinishAfterTransition();
    }
  }

در کلاس MainActivity باید متد setOnBackPressedListener رو پیاده سازی کنید، که به این صورت میتونید این کار رو انجام بدید:


public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener){
this.onBackPressedListener = onBackPressedListener;
}

و بعد با استفاده کردن از یه متد در کلاس فرگمنت عمل پیاده سازی دکمه برگشت رو انجام‌بدید:


public void manageOnBackPressed (){
  ((MainActivity) getActivity()).setOnBackPressedListener(new BaseBackPressedListener(getActivity()){
      @Override 
      public void doBack(){
         if (/*what ever*/){
             //what ever
             } else {
             super.doBack();
             }
  }

و بعد در بخش onCreateView مربوط به فرگمنت متد ()manageOnBackPressed رو قرار بدید...

ممنونم، من تا بخوام تجربه کسب کنم حالا حالاها باید وقت بذارم :)

مشکلم با تغییراتی که شما دادید حل شد

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط shervin soori
       با سلام خدمت دوستان عزیز 
      یک تب لی اوت در فرگمنت ایجاد کردم جهت ورود و عضویت ، در فرگمنت ورود برای ورود با اثر انگشت یک باتن گذاشتم که یک الرت دیالوگ رو نشون میده، الان مشکلم با سفارشی کردن فونت الرت دیالوگه
      چون توی یک لی اوت دیگه گذاشتم الرت رو توی فرگمنت ورود از من textView هارو قبول نمیکنه.
      اینم کد الرت دیالوگمه:
       
      final Button btn = getActivity().findViewById(R.id.finger_print_btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Dialog dialog = new Dialog(getContext()); dialog.setContentView(R.layout.activity_alert_dialog); AlertDialog.Builder D_E = new AlertDialog.Builder(getActivity()); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); Button dismissButton = (Button) dialog.findViewById(R.id.cancelBtn); dismissButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.show(); } });
    • توسط masoudandroid
      با سلام
       از اکتیویتی ۱ میخوام intent کنم به فرگمنتی در اکتیویتی۲  به نظرتون باید چیکار کنم؟؟؟
      در واقع یه اکتیویتی دارم که میخوام با کلیک بر روی یه تکست ویو بره به یه فرگمنت که جزئی از ساختار bottomnavigation هستش...
      تو فرگمنت که در اکتیویتی 2 قرار داره باید کدی زده بشه تا اکتیویتی 1 رو بخونه؟؟(قابل توجه که من اطلاعات نمیخوام پاس بدم فقط میخوام صفحات جابجا بشن)
      باتشکر از پاسخگویی شما دوستان و همکاران عزیز.
    • توسط soroush80
      سلام دستان من به یه مشکلی خوردم من یه battom barدرست کردم و خب چند تا فرگمنت براش قرار دادم الان میخوام تو یکی از فرگمنت هام  toolbarبزارم نه تو کل برنامه اما چون فایل جاوای اون activity من به صورت extends fragmentهست خیلی از خواصAppCompatActivity رو نداره به همین خاطر نمیتونم toolbarرو بهش اظافه کنم میخواستم اگه میشه یا یه روش بهم بگید که fragment هم خواصAppCompatActivity رو پیدا کنه یا یه راه حل بهم بدید.
      خیلی ممنون.
    • توسط yasin133
      چطور میتونم از یک فرگمنت به یک اکتیویتی انتقال پیدا کنم. تو دیزاین فرگمنتم یه دکمه دارم که میخوام باهاش به یه اکتیویتی برم، اما تو کلاس فرگمنتم وقتی میخوام باتنو تعریف کنم ارور میده برای findviewbyid. ممنون میشم اگه کمکم کنید 
    • توسط Omid Zakeri
      بهترین روش برای تجزیه و تحلیل فرگمنت ها استفاده از Arguments در آندروید می باشد.( setArguments  )
      چند راه برای تجزیه و تحلیل و انتقال اطلاعات به فرگمنت ها در اندروید وجود دارد. با این حال، هنگامی که این کار را انجام می دهید، باید مراقب باشید و در هنگام نمونه برداری و انتقال داده ها به قطعات باید از روش های اشتباه اجتناب کنید.
      با این حال، این روش اشتباه است. از آنجا که هنگامی که برنامه شما به پس زمینه ارسال می شود و برنامه های دیگر نیاز به حافظه بیشتر و بیشتر دارند، پس برنامه و منابع آن از حافظه پاک می شود تا فضای جدید را باز کند.
      import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; /** * Sample fragment to demonstrate the instantiation of fragments with arguments * * Created by Günhan on 28.10.2015. */ public class MyFragment extends Fragment { private String name; private int age; private TextView mNameTextView; private TextView mAgeTextView; public static MyFragment newInstance(String name, int age) { Bundle bundle = new Bundle(); bundle.putString("name", name); bundle.putInt("age", age); MyFragment fragment = new MyFragment(); fragment.setArguments(bundle); return fragment; } private void readBundle(Bundle bundle) { if (bundle != null) { name = bundle.getString("name"); age = bundle.getInt("age"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_sample, container, false); mNameTextView = (TextView) view.findViewById(R.id.nameTextView); mAgeTextView = (TextView) view.findViewById(R.id.ageTextView); readBundle(getArguments()); mNameTextView.setText(String.format("Name: %s", name)); mAgeTextView.setText(String.format("Age: %d", age)); return view; } } در این مثال، برای نمایش MyFragment باید از کد زیر استفاده کنید:
      Fragment fragment = MyFragment.newInstance("OMID", 27);  

  • دوره آموزشی اندروید آموزش ویدئویی اندروید آموزش برنامه نویسی اندروید اندروید کاپ دوره آنلاین اندروید کتاب های آموزشی اندروید بسته آموزشی اندروید دوره برنامه نویسی اندروید آموزش Kotlin آموزش برنامه نویسی ios مهارت های فروش
    آموزش برنامه نویسی اندروید
  • فایل