2017-09-27 52 views
0

我的自定義列表視圖行有刪除按鈕。我試圖用這個刪除按鈕刪除列表視圖中的特定項目。 (從收藏夾中刪除操作)。我可以刪除選定的項目,但刪除列表中的其餘項目(選定項目下的項目)。頂部仍然留下。我怎樣才能解決這個問題?提前致謝。選定的項目刪除與自定義列表中的其他列表中的問題

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,用戶可以添加自己喜歡的按鈕,和值發送FavoritesFragment具有獨特的鍵

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++; 
      } 

     }); 

這是我FavoritesFragment:

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; 
    } 
+0

是否要刪除項目或將其從收藏夾中刪除? – YoLo

+0

這將是偉大的,但我不能這樣做。所以我想在listview上刪除所選的最愛。 – PinkRabbits

+0

您可以使用對象類請讓它更容易 – YoLo

回答

2

創建你的對象類:

public class DemoGson { 

    private String radio_link,radio_name,listener_number; 

    public String getRadio_link() { 
     return radio_link; 
    } 

    public void setRadio_link(String radio_link) { 
     this.radio_link = radio_link; 
    } 

    public String getRadio_name() { 
     return radio_name; 
    } 

    public void setRadio_name(String radio_name) { 
     this.radio_name = radio_name; 
    } 

    public String getListener_number() { 
     return listener_number; 
    } 

    public void setListener_number(String listener_number) { 
     this.listener_number = listener_number; 
    } 
} 

雖然將數據添加到它創建新的對象,然後添加數據,然後插入特定對象ArrayList和傳遞的ArrayList到您的適配器

ArrayList<DemoGson> arrayList = new ArrayList<>(); 

     DemoGson demoGson = new DemoGson(); 
     demoGson.setRadio_link("yourlink"); 
     demoGson.setRadio_name("yourname"); 
     demoGson.setListener_number("2"); 

     arrayList.add(demoGson); 

,然後

adapter_2 = new FavoritesListAdapter(getActivity(),arrayList); 

和在適配器剛剛刪除您的arraylist位置

1

這並不沒有從適配器只能從您的自定義數組元素刪除,:

listenerNumbers.remove(position); 
radioName.remove(position); 

在額外的,你需要從適配器的內部ArrayList中刪除該項目。像這樣做:

remove(getItem(position)); 

一般情況下,這是不好的做法在適配器管理2門平行定製陣列(listenerNumbers,radioName你的情況)。最好定義包含這兩個字段的Item類,並將此類的對象的ArrayList提供給適配器作爲參數(而不是像你的情況那樣的字符串數組)。並且還實現支持該項目的XML,這將包含兩項(TextView和RadioButton)。

+0

我也嘗試從適配器的Arraylist中刪除元素。 // FavoritesFragment.radio_name_list.remove(position); // FavoritesFragment.radio_link_list.remove(position); // FavoritesFragment.listener_numbers.remove(position)。但這不是我的主要問題的解決方案,所以,看起來我必須嘗試其他方法。謝謝 – PinkRabbits

+0

同樣,從陣列中刪除項目不會將它們從適配器中刪除。 我上面提到的 - 正在運行適配器的內部方法。它也被稱爲remove,但它接受對象本身,而不是索引/位置。讓我們分兩行來做: String remItem = getItem(position); remove(remItem); 希望能夠澄清問題。 – Cadet

相關問題