2016-03-07 246 views
0

嗯,我有一個RecyclerView,我從選擇多個值,並希望選定行的值追加到數組,但我不知道我做錯了返回空:我獲取價值

import com.bignerdranch.android.multiselector.MultiSelector; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

/** 
* Created by MACBOOK on 07/03/16. 
*/ 


public class ChannelsAdapter extends RecyclerView.Adapter<ChannelsAdapter.ChannelsViewHolder> implements Filterable { 

    private LayoutInflater inflater; 
    private Context context; 

    List<ChannelsInformation> data = Collections.emptyList(); 

    private final List<ChannelsInformation> filteredChannelsList; 

    private final MultiSelector mMultiSelector = new MultiSelector(); 

     ArrayList <String> selected; 



    public ChannelsAdapter(Context context, List<ChannelsInformation> data){ 

     inflater = LayoutInflater.from(context); 


     this.context = context; 


     this.data = data; 


     filteredChannelsList = data; 
    } 

    public void remove(int position){ 
     data.remove(position); 
     notifyItemRemoved(position); 
    } 


    @Override 
    public ChannelsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View rowView = inflater.inflate(R.layout.custom_channel_row, parent, false); 

     ChannelsViewHolder holder = new ChannelsViewHolder(rowView); 

     return holder; 
    } 

    @Override 
    public void onBindViewHolder(final ChannelsViewHolder holder, final int position) { 

     ChannelsInformation current = data.get(position); 

     holder.CHANNELNAME.setText(current.channelName); 
     holder.ID.setText(current.id); 
     holder.mSolvedCheckBox.setChecked(current.isSelected); 






    } 

    @Override 
    public int getItemCount() { 
     return data.size(); 
    } 

    @Override 
    public Filter getFilter() { 
     return new UserFilter(this ,filteredChannelsList); 
    } 

private static class UserFilter extends Filter { 

    private final ChannelsAdapter adapter; 

    private final List<ChannelsInformation> originalList; 

    private final List<ChannelsInformation> filteredList; 

    private UserFilter(ChannelsAdapter adapter, List<ChannelsInformation> originalList) { 
     super(); 
     this.adapter = adapter; 
     this.originalList = new ArrayList<>(originalList); 
     this.filteredList = new ArrayList<>(); 
    } 

    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     filteredList.clear(); 
     final FilterResults results = new FilterResults(); 

     if (constraint == null || constraint.length() == 0) { 
      filteredList.addAll(originalList); 



     } else { 
      final String filterPattern = constraint.toString().toLowerCase().trim(); 


      for (final ChannelsInformation channel : originalList) { 






      } 
     } 
     results.values = filteredList; 
     results.count = filteredList.size(); 
     return results; 
    } 


    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     adapter.filteredChannelsList.clear(); 
     if ((ArrayList<ChannelsInformation>) results.values != null) { 

      adapter.filteredChannelsList.addAll((ArrayList<ChannelsInformation>) results.values); 
     } 
     adapter.notifyDataSetChanged(); 

    } } 






class ChannelsViewHolder extends SwappingHolder implements View.OnClickListener { 

    TextView CHANNELNAME,ID; 
    CheckBox mSolvedCheckBox; 




    public ChannelsViewHolder(View itemView) { 


     super(itemView , mMultiSelector); 

     mMultiSelector.setSelectable(true); 

     mSolvedCheckBox = (CheckBox) itemView.findViewById(R.id.selectedChannelCheckBox); 

     itemView.setOnClickListener(this); 

     CHANNELNAME = (TextView) itemView.findViewById(R.id.ChannelNameTxtView); 
     ID = (TextView) itemView.findViewById(R.id.ChannelRowIdTextView); 





    } 

    @Override 
    public void onClick(View v) { 

     if (!mMultiSelector.tapSelection(this)) { 
      Toast.makeText(context,CHANNELNAME.getText(),Toast.LENGTH_LONG).show(); 

      mSolvedCheckBox.toggle(); 


      selected.add(ID.toString()); 


      Log.d(""+selected , " : value of selected "); 


     } 




    } 
}} 

另一個類:

public class ChannelsInformation { 
    String id,channelName; 
    boolean isSelected; 
} 

上myFragmentCLass:

Fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     String data = ""; 
     List<ChannelsInformation> stList = ((ChannelsAdapter) channelsAdapter).data; 

     for (int i = 0; i < stList.size(); i++) { 
      ChannelsInformation singleStudent = stList.get(i); 
      if (singleStudent.isSelected) { 

       data = data + "\n" + singleStudent.channelName; 

      } 

     } 

     Toast.makeText(getActivity(), 
      "Selected Students: \n" + data, Toast.LENGTH_LONG) 
      .show(); 




    } 
}); 

那麼我想這個從過去的4個小時,你可以看到,我甚至嘗試multiselector它的庫中創建一個selectMode作爲同我們所擁有的ListView的,現在我在我看來推杆的複選框,並試圖讓theValue的複選框檢查框,如果它的檢查,然後顯示數據,但得到null作爲回報,如果有人的錯誤在這裏,然後請指出它會對我很有幫助和我,讚賞我,謝謝

回答

1

你可以嘗試創建List<YourItem> selectedItems 並添加甚至選定的項目。不要忘記從這個列表中刪除未選定的項目。在這個適配器創建的getter

public List<YoutItem> getSelectedItens(){ 

return selectedItems; 
} 

it's地圖例如

+0

@llya感謝了很多回應的人,基本上是一個iOS開發人員,並沒有太多的東西進入到機器人中,所以你仍然想清楚所有這些方面,所以你可以請Ase解釋我有點深?請因爲我沒有從你的問題得到確切的點 –

+1

檢查我的編輯,請 –

+0

嗨@llya感謝您的鏈接,所以看到你的例子後,我需要的是'onBindViewHolder',我說得對嗎? –

1

好吧,我不看你的

ArrayList<String> selected; 

初始化這樣做

public ChannelsAdapter(Context context, List<ChannelsInformation> data) { 

    inflater = LayoutInflater.from(context); 

    this.context = context; 

    this.data = data; 

    filteredChannelsList = data; 

    // like this 
    selected = new ArrayList<>(); 
} 
+0

嘿@mithun非常感謝回答的人,我非常感謝這一點,但是在代碼中我沒有將它們添加到任何數組中,只是遍歷所有數據並檢查視圖是否被選擇爲不是for(int i = 0 ; i

+0

點是變得空回報:( –