恢复片段活动的状态



我有两个活动(A和B)。我在活动 A 中有一个片段 F。我的片段 F 硬币包含 3 个编辑文本 (1,2,3)。

我的应用从活动 B 获取字符串,并将其放置在 EditText 3 中。我对此没有问题。我的问题是,当我在 EditText 1 和 2 中键入某些内容时,我将从活动 B 获取字符串并将其放入 EditText 3,我在 EditText 1 和 2 中键入的所有信息都消失了。

我的问题是,即使我将字符串从活动 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。

您的片段 F 也可以重新创建或恢复,具体取决于您在活动 A 中管理片段的方式,因此您将丢失存储在 editText 中的所有信息。

如果您发布活动 A 的代码,那将很有用。

在转换之间保留片段数据的最佳方法是将其存储在您的活动中,然后从片段中获取。

在你的片段中

  @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;
       }
 }

修改片段时,您应该有从片段设置字符串的方法。

希望对:)有所帮助

最新更新