【发布时间】:2016-03-25 06:46:12
【问题描述】:
我在 tablayout/viewpager 的片段之间传递数据时遇到问题。我有一个带有四个选项卡的 Tablayout,并且使用 viewpager 启用了切换。我正在尝试从 FirstTabFragment、SecondTabFragment 和 ThirdTabFragment 保存数据,并在最后一个选项卡 = ReviewFragment 中检索它们。我已经实现了将数据保存到 SharedPreferences 中,这适用于第一个和第二个片段,第三个片段中的数据没有保存,并且在打开 ReviewFragment 时显示为空。
FirstFragment是一个Listview,被选中的listview项中的字符串被保存。 SecondFragment,是一个editText,输入的值在按下下一个按钮时保存。 ThirdFragment 也是一个 Listview,FirstFragment 中的代码与此片段中的代码相同,但没有按预期工作。
我所说的不按预期工作的意思是: ThirdFragment 中的值实际上保存 到 SharedPreferences 中,但没有检索 在打开 ReviewFragment 时立即执行。我知道这一点是因为当我关闭应用并重新打开它时,它会显示 SharedPreferences 中保存的值。
下面是来自 ThirdFragment 和 ReviewFragment 的代码
第三片段
private SharedPreferences memory1;
private SharedPreferences.Editor edt1;
private ListView listView;
private ArrayAdapter<String> listAdapter;
public MtnPaymentMtdFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.payment_method, container, false);
// Find the ListView resource.
listView = (ListView) v.findViewById(R.id.mtn_plv);
// Create and populate a List
String[] p_method = new String[]{"ATM - MasterCard - Visa - Verve", "Online Bank Transfer", "Bank Deposit", "Recharge Card", "Mobile Banking"};
ArrayList<String> p_methods = new ArrayList<String>();
p_methods.addAll(Arrays.asList(p_method));
// Create ArrayAdapter using the list.
listAdapter = new ArrayAdapter<String>(this.getActivity(), R.layout.item_row3, p_methods);
// Set the ArrayAdapter as the ListView's adapter.
listView.setAdapter(listAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String selectedFromList = (listView.getItemAtPosition(i).toString().trim());
switch (i) {
case 0:
MtnReviewFragment fragment = new MtnReviewFragment();
Bundle bundler = new Bundle();
bundler.putString("payment_mtd", selectedFromList);
fragment.setArguments(bundler);
// memory1 = getActivity().getPreferences(0);
// edt1 = memory1.edit();
// edt1.putString("payment_mtd", selectedFromList);
// edt1.apply();
((MtnActivity) getActivity()).setCurrentItem(3, true);
break;
case 1:
// String selectedFromList1 = (listView.getItemAtPosition(i).toString().trim());
memory1 = getActivity().getPreferences(0);
edt1 = memory1.edit();
edt1.putString("payment_mtd", selectedFromList);
edt1.apply();
((MtnActivity) getActivity()).setCurrentItem(3, true);
break;
case 2:
// String selectedFromList2 = (listView.getItemAtPosition(i).toString().trim());
memory1 = getActivity().getPreferences(0);
edt1 = memory1.edit();
edt1.putString("payment_mtd", selectedFromList);
edt1.apply();
((MtnActivity) getActivity()).setCurrentItem(3, true);
break;
case 3:
// String selectedFromList3 = (listView.getItemAtPosition(i).toString().trim());
memory1 = getActivity().getPreferences(0);
edt1 = memory1.edit();
edt1.putString("payment_mtd", selectedFromList);
edt1.apply();
((MtnActivity) getActivity()).setCurrentItem(3, true);
break;
case 4:
// String selectedFromList4 = (listView.getItemAtPosition(i).toString().trim());
memory1 = getActivity().getPreferences(0);
edt1 = memory1.edit();
edt1.putString("payment_mtd", selectedFromList);
edt1.apply();
((MtnActivity) getActivity()).setCurrentItem(3, true);
}
}
});
return v;
}
}
评论片段
private SharedPreferences memory;
private SharedPreferences.Editor edt;
private TextView rev_bundle_result;
private TextView rev_mob_result;
private TextView rev_pmtd_result;
public static SharedPreferences savedSharedPreference;
public static String filename = "nameValue";
private static final String REGISTER_URL = "http://zzzzzzzzz.com/xxxxx/register.php";
public MtnReviewFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.review_layout, container, false);
rev_bundle_result = (TextView) v.findViewById(R.id.rev_bundle_result);
rev_mob_result = (TextView) v.findViewById(R.id.rev_mob_result);
rev_pmtd_result = (TextView) v.findViewById(R.id.rev_pmtd_result);
Button make_payment = (Button) v.findViewById(R.id.make_payment_but);
memory = getActivity().getPreferences(0);
String bundles = memory.getString("bundle_name", "empty");
String mob_number = memory.getString("mob_number", "empty");
String payment_mtds = memory.getString("payment_mtd", "empty");
String p_amount = memory.getString("amount", "empty");
rev_bundle_result.setText(bundles);
rev_mob_result.setText(mob_number);
rev_pmtd_result.setText(payment_mtds);
【问题讨论】:
-
第四个选项卡在您到达第三个布局后立即呈现。当用户切换到该选项卡时刷新您的第四个选项卡。
setUserVisibleHint
标签: android listview android-fragments android-listview android-viewpager