我试图在我的应用中制作收藏夹模块。如果用户单击收音机的收藏夹按钮,则此收音机必须显示在收藏夹屏幕中。但只是最后点击收藏夹屏幕中显示的收音机。我想在收藏夹中保存多个收音机。哪里我做错了?提前谢谢。
这是RadioFragment中最喜欢的按钮
add_favorites_button= (Button) view.findViewById(R.id.add_favorites_button);
add_favorites_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences settings = getActivity().getSharedPreferences("PREFS", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("radio_link", radio_play_link);
editor.putString("radio_namee", radio_name);
editor.commit();
}
});
我试图获取这些值并将其放入FavoritesFragment中的ArrayList中。为了显示收到的值,我在textview中发送它们以尝试。
public class FavoritesFragment extends Fragment {
public FavoritesFragment() {
// Required empty public constructor
}
TextView radio_name_txt, radio_link_txt;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_favorites, container, false);
List<String> radio_name_list = new ArrayList<>();
List<String> radio_link_list = new ArrayList<>();
SharedPreferences settings = getActivity().getSharedPreferences("PREFS",0);
radio_name_list.add(settings.getString("radio_namee", ""));
radio_link_list.add(settings.getString("radio_link", ""));
radio_name_txt = (TextView) view.findViewById(R.id.radio_name_txt);
radio_link_txt = (TextView) view.findViewById(R.id.radio_link_txt);
String a= "";
String b= "";
for (int i =0; i<radio_name_list.size(); i++) {
a = a +radio_name_list.get(i);
b = b +radio_link_list.get(i);
}
radio_name_txt.setText(a);
radio_link_txt.setText(b);
return view;
}
}
答案 0 :(得分:1)
因为您为每个单选按钮插入使用相同的键,它将覆盖以前的值。
您需要将值存储在数组中,然后将数组存储在首选项中。
或者更好的方法是在android中使用sqllite数据库将喜欢的内容存储在表格中。
答案 1 :(得分:1)
尝试在列表视图中显示列表radio_name_list和radio_link_list中的值:
据我所知,你只有一个TextView。尝试创建ListView而不是TextView。它会更有条理。
答案 2 :(得分:1)
您有大量数据,共享首选项不是存储7000项数据的写入选项。共享首选项适用于简单且不太频繁的数据存储。对于您的情况,您需要创建SQLite数据库。如果它对您来说是全新的,那么只需访问this link.
中的Androids only Documentation Training答案 3 :(得分:1)
editor.putString(&#34; radio_link&#34;,radio_play_link); editor.putString(&#34; radio_namee&#34;,radio_name);
每次尝试添加新的时,都会覆盖收藏夹,所以不要执行上述操作,请执行以下操作:
editor.putString(radio_play_link, radio_play_link);
editor.putString(radio_name, radio_name);
所以现在你有了一个键值对,你可以像这样迭代你的收藏夹:
String radioLink = "", radioKey = "";
for (Map.Entry<String, ?> entry : getSharedPreferences("PREFS",0).getAll().entrySet()) {
radioKey = entry.getKey();
radioLink = (String) entry.getValue();
}