切换到另一个活动并返回后,在Fragment上保留editText的值

时间:2016-02-11 18:20:05

标签: android android-fragments android-activity android-fragmentactivity

我是片段新手,目前正面临挫折。

我的活动中有TabLayout,其中有两个Fragments。我的问题在第一个问题之内。

在它上面有一个EditText,当我点击其中一个Activity项时,点击它会打开一个包含RecyclerView的新RecyclerView },我返回到我的第一个Activity,然后使用EditText项中的数据填充RecyclerView。挫折是,在Fragment上还有一个EditText,如果我点击第一个选项,那么如果填充得到清楚,则选择RecyclerView活动中的另一个项目。

第二个EditText的值变得清晰,因为片段正在再次创建,我怎样才能保存它以便在片段的活动恢复并重新创建片段时不会发生变化?< / p>

修改:我认为我已经找到了问题的根源,在我的RecyclerView活动中,当我点击一个项目时,我将以新的方式返回活动Intent,使用putExtra()类的Intent方法添加名称变量,以便重新启动我的MainActivity,使其重新创建片段等等......

问题是我已经在返回主要活动的意图上使用addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),是否有另一种方式返回活动而不是重新创建活动?

我返回活动的代码段:

Intent actMain = new Intent(SecondActivity.this, MainActivity.class);

actMain.putExtra("NAME_SELECTED", nameSelected);

actMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(actMain);
finish();

我的活动与tabLayout:

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

    fragmentOne = new FragmentOne();

    tabLayout = (TabLayout)findViewById(R.id.tabLayout);
    viewPager = (ViewPager)findViewById(R.id.viewPager);

    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());

    // Adds the fragment to the viewpager and set's it's title
    viewPagerAdapter.addFragment(fragmentOne, "FIRST");

    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);

}

@Override
protected void onResume() {
    super.onResume();

    // Bundle that receives the data from the activity with the RecyclerView
    Bundle bundleReceived = getIntent().getExtras();
    Intent intentReceived = getIntent();

    // Bundle who sends the data to the fragment
    Bundle fbundle = new Bundle();

    // Variable send to the fragment
    String name = "";

    // Check if the bundle has the variable
    if (bundle != null && bundle.containsKey("NAME_SELECTED")){

        name =  intentReceived.getStringExtra("NAME_SELECTED");
        fbundle.putString("NAME_SELECTED_TO_FRAMENT",name);

        // Sets the arguments to the fragment
        fragmentOne.setArguments(fbundle);

    }
}

我的片段:

public class FragmentOne extends Fragment implements View.OnClickListener {

Context context;
Bundle bundle;

private TextInputLayout txtinputLayoutCliente, txtinputLayoutPedidoObs;

public FragmentOne() {
    // Required empty public constructor

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_one, container, false);

    edtName = (EditText) view.findViewById(R.id.edtInputName);
    edtCity = (EditText) view.findViewById(R.id.edtInputCity)

    // Custom listener to open the second activity when the edittext is cliced
    CustomListener customListener = new CustomListener();

    edtName.setOnClickListener(customListener);

    edtName.setOnFocusChangeListener(customListener);

    // Bundle that receives the arguments
    bundle = this.getArguments();

    // Check if the bundle isn't empty
    if (bundle != null && bundle.containsKey("NAME_SELECTED_TO_FRAMENT")) {

        String nameSelected = bundle.getString("NAME_SELECTED_TO_FRAMENT")

        // Sets the name on the editText
        edtName.setText(nameSelected)

    }

    return view;

    }
}

2 个答案:

答案 0 :(得分:0)

我认为你想要的是观看小组:Difference between View and ViewGroup in Android

如果您观看Google为Android Studio 2.0预览举办的技术活动,他们会特别提到他们认为人们在使用View Groups时会在整个地方使用Fragments。

(我自己碰到了这个。)

答案 1 :(得分:0)

使用zgc7009中的提示我尝试使用startActivityforResult()方法,该方法运行正常,因此为了使其正常工作,我在EditText上将startActivity()更改为startActivityforResult()并且在我的RecyclerView而不是:

actMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(actMain);

我正在使用:

setResult(RESULT_OK,actMain);
finish();

所以,我已经覆盖了onActivityResult()的{​​{1}}方法,并在我的片段中调用MainActivity来获取数据。