2017-09-27 3 views
0

내 사용자 지정 목록보기 행에 제거 버튼이 있습니다. 이 제거 단추로 listview에서 특정 항목을 삭제하려고합니다. (즐겨 찾기 동작에서 제거). 선택한 항목은 삭제할 수 있지만 나머지 항목 (선택한 항목 아래의 항목)은 삭제할 수 있습니다. 윗부분은 그대로있어. 이 문제를 어떻게 해결할 수 있습니까? 미리 감사드립니다.선택한 항목이 사용자 정의 목록보기의 나머지 목록과 함께 삭제되는 문제

FavoriteListAdapter :

내 PlayRadioFragment에서
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); 
     } 
    } 

} 

, 사용자가 좋아하는 버튼을 추가, 그리고 값이 고유 키

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을 보내 그리고 이것은 내 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

Object 클래스를 사용할 수 있습니까? 더 쉽게 작업 할 수 있습니다. – YoLo

답변

2

다음으로 Object 클래스를 만듭니다 여기에 데이터를 추가하면 새로운 객체를 생성하고 데이터를 추가

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<DemoGson> arrayList = new ArrayList<>(); 

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

     arrayList.add(demoGson); 

다음 어댑터의 ArrayList를 전달하는 특정 개체를 삽입

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

및 어댑터는 arraylist

1

이 내용은 사용자 정의 배열에서, 어댑터에서 요소를 제거하지 않습니다 : 추가에

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

을, 당신은 어댑터의 내부의 ArrayList에서 항목을 제거해야합니다. 이처럼 수행

remove(getItem(position)); 

일반적으로, 좋은 어댑터에 2 개 병렬 사용자 정의 배열을 관리하는 방법 아니다 (listenerNumbers는 radioName 귀하의 경우). 이 두 필드를 모두 포함하는 Item 클래스를 정의하고이 클래스의 객체에 대한 ArrayList를 매개 변수로 어댑터에 제공하는 것이 더 낫습니다 (사례에서와 같이 String 배열 대신). 또한 항목에 대한 XML 지원을 구현합니다 (두 항목 (TextView 및 RadioButton)을 가짐).

+0

또한 어댑터의 Arraylist에서 요소를 제거하려고했습니다. // FavoritesFragment.radio_name_list.remove (position); // FavoritesFragment.radio_link_list.remove (position); // FavoritesFragment.listener_numbers.remove (위치). 하지만 그것은 내 주요 문제에 대한 해결책이 아니므로 다른 방법을 시도해야 할 것 같습니다. 감사합니다 – PinkRabbits

+0

다시, 배열에서 항목을 제거해도 어댑터에서 제거되지 않습니다. 위에서 제안한 것은 어댑터의 내부 메소드를 실행 중입니다. 제거라고도하지만 인덱스/위치가 아닌 객체 자체를 허용합니다.두 줄로 할 수 있습니다 : String remItem = getItem (position); remove (remItem); 문제를 분명히 밝히기를 바랍니다. – Cadet