2016-03-07 106 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

点是变得空回报:( –