【发布时间】:2018-03-08 19:35:12
【问题描述】:
我的自定义列表视图行有删除按钮。我正在尝试使用此删除按钮删除列表视图中的特定项目。 (从收藏夹动作中删除)。我可以删除所选项目,但列表的其余部分(所选项目下的项目)会随之删除。顶部仍然存在。我怎样才能解决这个问题?提前致谢。
FavoriteListAdapter:
public class FavoritesListAdapter extends ArrayAdapter<String> {
private Activity context;
private List<String> radioName;
private List<String> listenerNumbers;
public FavoritesListAdapter(Activity context, List<String> radioName, List<String> listenerNumbers) {
super(context, R.layout.custom_favorites_listview, radioName);
this.context=context;
this.radioName=radioName;
this.listenerNumbers=listenerNumbers;
}
@NonNull
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
View r= convertView;
FavoritesViewHolder viewHolder = null;
if (r == null) {
LayoutInflater layoutInflater= context.getLayoutInflater();
r= layoutInflater.inflate(R.layout.custom_favorites_listview,null,true);
viewHolder = new FavoritesViewHolder(r);
r.setTag(viewHolder);
}
else {
viewHolder = (FavoritesViewHolder) r.getTag();
}
viewHolder.row_tv_favorites_radio_name.setText(radioName.get(position));
viewHolder.row_img_favorites_radio_icon.setImageResource(R.drawable.radio_logo_renkli);
viewHolder.row_tv_favorites_listener_numbers.setText("Listeners : " + listenerNumbers.get(position));
viewHolder.button_remove_from_favorites_list.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listenerNumbers.remove(position);
radioName.remove(position);
SharedPreferences settings = context.getSharedPreferences("PREFS", 0);
final SharedPreferences.Editor editor = settings.edit();
editor.remove("radio_link"+ position);
editor.remove("radio_name" + position);
editor.remove("listener_number" + position);
// editor.clear();
editor.commit();
// FavoritesFragment.radio_name_list.remove(position);
// FavoritesFragment.radio_link_list.remove(position);
// FavoritesFragment.listener_numbers.remove(position);
notifyDataSetChanged();
}
});
return r;
}
class FavoritesViewHolder {
TextView row_tv_favorites_radio_name;
TextView row_tv_favorites_listener_numbers;
ImageView row_img_favorites_radio_icon;
Button button_remove_from_favorites_list;
FavoritesViewHolder(View v) {
row_tv_favorites_radio_name= (TextView) v.findViewById(R.id.txt_radio_name_favorites);
row_tv_favorites_listener_numbers = (TextView) v.findViewById(R.id.txt_listener_numbers_favorites);
row_img_favorites_radio_icon = (ImageView) v.findViewById(R.id.img_radio_icon_favorites);
button_remove_from_favorites_list = (Button) v.findViewById(R.id.remove_favorites_from_list_button);
}
}
}
在我的 PlayRadioFragment 中,用户添加了收藏按钮,并将值发送到带有唯一键的收藏夹片段
public static int incrementedValue = 0;
SharedPreferences settings = getActivity().getSharedPreferences("PREFS", 0);
final SharedPreferences.Editor editor = settings.edit();
add_favorites_button= (Button) view.findViewById(R.id.add_favorites_button);
add_favorites_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editor.putString("radio_link"+ incrementedValue, radio_play_link);
editor.putString("radio_name" + incrementedValue, radio_name);
editor.putString("listener_number" + incrementedValue, listener_number);
// editor.clear();
editor.commit();
incrementedValue++;
}
});
这是我的收藏夹片段:
public class FavoritesFragment extends Fragment {
public static FavoritesListAdapter adapter_2;
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);
final List<String> radio_name_list = new ArrayList<>();
final List<String> radio_link_list = new ArrayList<>();
final List<String> listener_numbers = new ArrayList<>();
for (int i=0; i<Integer.MAX_VALUE; i++) {
SharedPreferences settings = getActivity().getSharedPreferences("PREFS",0);
String radio_name = settings.getString("radio_name" +i, "");
String radio_link = settings.getString("radio_link" +i, "");
String listener_number = settings.getString("listener_number" +i, "");
if (TextUtils.isEmpty(radio_name)){break;}
else {radio_name_list.add(radio_name);}
if (TextUtils.isEmpty(radio_link)){break;}
else {radio_link_list.add(radio_link);}
listener_numbers.add(listener_number);
}
PlayRadioFragment.incrementedValue = radio_name_list.size();
ListView listView_favorites = (ListView) view.findViewById(R.id.listview_favorites);
adapter_2 = new FavoritesListAdapter(getActivity(), radio_name_list, listener_numbers);
listView_favorites.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
PlayRadioFragment fragment= new PlayRadioFragment();
Bundle bundle= new Bundle();
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
bundle.putString("radio_play_links", radio_link_list.get(position));
bundle.putString("radio_name", radio_name_list.get(position));
bundle.putString("listener_number", listener_numbers.get(position));
fragment.setArguments(bundle);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.frame_layout,fragment);
fragmentTransaction.commit();
}
});
listView_favorites.setAdapter(adapter_2);
return view;
}
【问题讨论】:
-
您要删除项目还是将其从收藏夹中删除?
-
会很棒,但我做不到。所以我正在尝试删除列表视图上选定的收藏夹。
-
你可以使用Object类吗?它会让工作更轻松
-
我是安卓新手,不知道怎么用。如果不需要很长时间,你能告诉我我的代码吗?
标签: android listview sharedpreferences