簡體   English   中英

恢復片段活動狀態

[英]Resuming state of fragment activity

我有兩個活動(A和B)。 我在活動A中有一個片段F。我的片段F共包含3個EditText(1,2,3)。

我的應用程序從活動B獲取一個字符串,並將其放在EditText 3中。我對此沒有任何問題。 我的問題是,當我在EditText 1和2中鍵入內容時,我將從活動B中獲取字符串並將其放入EditText 3中,我在EditText 1和2中鍵入的所有信息都消失了。

我的問題是,即使我從ACTIVITY B到EditText 3,也要保留在EditText 1和2中鍵入的信息。這是我的代碼:

活動A

public class ActivityA extends FragmentActivity {

    ViewPager viewPager = null;
    PageIndicator pIndicator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);

        viewPager = (ViewPager) findViewById(R.id.pager);
        FragmentManager fragmentManager = getSupportFragmentManager();
        viewPager.setAdapter(new MyAdapter(fragmentManager));

        pIndicator = (PageIndicator)findViewById(R.id.indicator);
        pIndicator.setViewPager(viewPager);
    }

    public class MyAdapter extends FragmentStatePagerAdapter {

        public MyAdapter (FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int i) {
            Fragment fragment = null;

            if (i == 0)
            {
                fragment = new FragmentF();
            }
            if (i == 1)
            {
                fragment = new FragmentG();
            }
            if (i == 2)
            {
                fragment = new FragmentH();
            }
            if (i == 3)
            {
                fragment = new FragmentI();
            }
            return fragment;
        }

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

        @Override
        public CharSequence getPageTitle(int position) {

            if (position == 0)
            {
                return "TAB.F";
            }
            if (position == 1)
            {
                return "TAB.G";
            }
            if (position == 2)
            {
                return "TAB.H";
            }
            if (position == 3)
            {
                return "TAB.I";
            }
            return null;
        }
    }

    public void btn_to_actb(View view) {

        Intent intent = new Intent(this, ActivityB.class);
        startActivity(intent);
    }

活動B

public final static String EXTRA_MESSAGE = "com.sample.MESSAGE";

    // onClick get button from activity B layout
    public void get(View view) {
        Intent intent = new Intent(this, ActivityA.class);
        TextView textView = (TextView)findViewById(R.id.coordinates);
        String message = textView.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);     
    }

片段F

EditText editText;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        String num = getActivity().getIntent().getStringExtra("com.sample.MESSAGE");

        View v = inflater.inflate(R.layout.fragmentf, container, false);

        // EditText3 from fragment F layout
        editText = (EditText) v.findViewById(R.id.edittext3);    
        editText.setText(num);
        return v;
    }

請注意,當您從B啟動對活動A的意圖時,可以重新創建恢復活動A,具體取決於A是停止還是仍在內存中。

您可以根據活動A中如何管理片段來重新創建或恢復片段F,因此您將丟失存儲在editTexts中的所有信息。

如果您發布活動A的代碼,這將很有用。

保留過渡之間的片段數據的最佳方法是將其存儲在Activity中,並從Fragment中獲取數據。

在你的片段中

  @Override
  public void onResume(){
       EditText1.setText(getActivity().getTextOfEditText1());
       EditText2.setText(getActivity().getTextOfEditText2());
       super.onResume();
  }

**並且在您的活動中**

 public class A extends Activity{
       //...
       private String textOfEditText1;
       private String textOfEditText2;


       //... Other stuff

       public String getTextOfEditText1(){
              return textOfEditText1;
       }
       public String getTextOfEditText2(){
              return textOfEditText2;
       }

 }

修改字符串時,應該具有從片段設置字符串的方法。

希望能幫助到你 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM