مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

mahmood.m

عضویت از 1396/07/20

از بین رفتن و خالی شدن فرگمنت ها هنگام جا به جایی در بین آنها

  • پنجشنبه 26 بهمن 1396
  • 00:55
تشکر میکنم

سلام دوستان عزیز وقت بخیر

من یک اکتیویتی اصلی دارم و داخل این اکتیویتی یک TabLayout و یک ViewPager دارم و چهار تا Fragment در این ViewPager دارم همان طور که از عنوان تاپیک مشخصه وقتی بین فرگمنت ها جا به جا میشم اطلاعاتشون از بین میره و تبدیل میشن به یک صفحه خالی...
دوستان عزیز اگر اطلاعات و تجربه ای در این زمینه دارین ممنون میشم راهنمایی کنید
پیشاپیش ممنون

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

نرجس اسماعیلی

عضویت از 1393/01/20

  • شنبه 28 بهمن 1396
  • 14:19

سلام

لطفا خطا یا ارورتون و بگید که بتونم بیشتر راهنمایی تون کنم

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

کاربر سایت

mahmood.m

عضویت از 1396/07/20

  • شنبه 28 بهمن 1396
  • 23:00

سلام وقت بخیر

خیلی ممنون از جواب

خطا و اروری نداره فقط نمیدونم چرا وقتی بین فرگمنت هایی که داخل ViewPager قرار داره جا به جا میشم اطلاعاتشون از بین میره ؟و این زمانی رخ میده که از 3 تا فرگمنت و یا بیشتر استفاده کرده باشم و این یعنی با 2 تا فرگمنت هیچ مشکلی پیش نمیاد.مثلا فرض کنید 3 تا فرگمنت به ترتیب با نام های A و B و C داریم و زمانی که برنامه اجرا بشه ابتدا در فرگمنت A هستیم و در حالی که هنوز اطلاعات این فرگمنت به طور کامل لود نشده اگر به فرگمنت B بریم خب هیچ مشکلی پیش نمیاد ولی اگر بلافاصله به فرگمنت C بریم با این کار بعد از بازگشت به فرگمنت A دیگه هیچی مشاهده نمیشه و اطلاعاتش از بین رفته و مانند یک صفحه خالی میشه و همچنین برای فرگمنت C هم این مشکل پیش میاد اما برای فرگمنت B که در این وسط قرار دارد هیچ مشکلی پیش نمیاد.

و این مشکل برای فرگمنت های A و C زمانی رخ میده که اطلاعات داخلشون به طور کامل لود نشده باشه یعنی اگر صبر کنم تا اطلاعات فرگمنت A به طور کامل لود بشه و سپس به فرگمنت C برم هیچ مشکلی برای فرگمنت A پیش نمیاد.

امیدوارم که با این توضیحات و واژه های تکراری منظورمو درست رسونده باشم

پیشاپیش ممنون

کاربر سایت

نرجس اسماعیلی

عضویت از 1393/01/20

  • یکشنبه 29 بهمن 1396
  • 14:54

ببنید یه موضوعی که هست من خودم تو نت سرچ کردم فقط با دو فرگمنت بوده یعنی زمانی که من از فزگمن a می خوام به b برم داره ولی حالا از دومی به سومی نمیشه

و تمام سورس های اندرویدس همسن طوری بوده ولی یه قطعه کد دیدم ببینید مشکلتون بر طرف میشه



All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.

http://developer.android.com/training/basics/fragments/communicating.html

test.java // in your case its MainActivity

    public class test extends FragmentActivity implements textEntered {

        String value;
        boolean check=false;
         BottomFragment frg2;
         FragmentTransaction transaction;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Top_Fragment frg=new Top_Fragment();
            frg2=new BottomFragment();
            FragmentManager manager=getSupportFragmentManager();
            transaction=manager.beginTransaction();
            transaction.add(R.id.My_Container_1_ID, frg, "Frag_Top_tag");
            transaction.add(R.id.My_Container_3_ID, frg2, "Frag_Bottom_tag");
            transaction.commit();
        }

        @Override
        public void setValue(String editextvalue) {
            // TODO Auto-generated method stub
            value =editextvalue;
            Log.i("..............",""+value);
              if (frg2 != null) {
                   frg2.setName(value);
                } 
              else
              {
                  Toast.makeText(getApplicationContext(),"fragment 2  is null", 1000).show();
              }
        }

    }

Top_Fragment.java

public class Top_Fragment extends Fragment{
    textEntered mCallback;
    Button b;
    EditText ed;
    public interface textEntered {
        public void setValue(String editextvalue);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        View view=inflater.inflate(R.layout.my_fragment1, container, false);
        ed = (EditText) view.findViewById(R.id.editText1);


        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
         b=  (Button) getView().findViewById(R.id.button1);
            b.setOnClickListener(new OnClickListener()
            {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String s =ed.getText().toString();
                    mCallback.setValue(s);
                }

            });
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
             mCallback = (textEntered) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement textEntered");
        }
    }
}

my_fragment1.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:ems="10"
        android:textColor="#000000"
        android:singleLine="true" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:text="Button" />

</RelativeLayout>

Change to

 display_text=(TextView) view.findViewById(R.id.textView1);
 // id is textView 1 not editText1





کاربر سایت

mahmood.m

عضویت از 1396/07/20

  • یکشنبه 29 بهمن 1396
  • 23:52

سلام وقت بخیر

خیلی ممنون از جواب

با این کد مشکلم حل نشد ولی پس از کلی فکرو ور رفتن با کدهای برنامه فهمیدم مشکل از SwipeRefreshLayout بود وقتی اینو حذف کردم درست شد ولی هنوزم نفهمیدم که چرا با این Swipe مشکل داشت به هر حال مشکلم حل شد هر چند دیگه نمیتونم از Swipe تو برنامم استفاده کنم.

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

شبتون بخیر

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

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)