点击按钮如何从SharedPreferences的RecyclerView列表中展示随机字符串?
兄弟,你现在的问题很清晰:你直接把SharedPreferences里存的整个列表的JSON序列化字符串设置到文本框里了,所以才会显示那种包含所有字段的JSON结构,而不是你想要的单个mLine1的内容。
咱们一步步来改:
问题根源
你在点击按钮时用的randomtext是直接从SharedPreferences取出的完整JSON串(就是你saveData()里用Gson序列化整个mExampleList得到的结果),没有做反序列化和随机选取的操作,自然会显示全部数据。
修改方案
你需要在按钮点击事件里,先把JSON串反序列化成ArrayList<ExampleItem>,然后随机挑一个item,再把它的mLine1设置到文本框里。可以复用你loadData()里的反序列化逻辑:
修改后的按钮点击代码如下:
PushTheButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { btn1.startAnimation(anim1); // 1. 取出存储的JSON字符串 SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", Context.MODE_PRIVATE); String json = sharedPreferences.getString("task list", null); // 2. 反序列化成ExampleItem列表 Gson gson = new Gson(); Type type = new TypeToken<ArrayList<ExampleItem>>(){}.getType(); ArrayList<ExampleItem> exampleList = gson.fromJson(json, type); // 3. 处理空列表的情况,避免崩溃 if (exampleList == null || exampleList.isEmpty()) { StartText2.setText("没有可用数据"); return; } // 4. 随机选取一个item Random random = new Random(); int randomIndex = random.nextInt(exampleList.size()); ExampleItem randomItem = exampleList.get(randomIndex); // 5. 设置mLine1内容到文本框 StartText2.setText(randomItem.getMLine1()); // 这里要确保你的ExampleItem有getter方法,或者直接访问mLine1(如果是public字段的话) } });
额外提示
- 确保你的
ExampleItem类有对应的getter方法(比如getMLine1()),如果字段是public修饰的话,也可以直接用randomItem.mLine1。 - 可以把反序列化逻辑封装复用,比如直接调用你已经写好的
loadData()获取mExampleList,再从里面随机选取,这样代码会更简洁。
内容的提问来源于stack exchange,提问作者Lokker
相关产品推荐
相关产品推荐

