Android (0,mServiceList.size()); } if(mListener!=null){ mListener.onItemClicked(位置); 解雇(); } } }); } @凌驾 public int getItemCount(){ 返回mServiceList.size(); } 类DataViewHolder扩展了RecyclerView.ViewHolder{ 文本视图mServiceText; DataViewHolder(视图v){ 超级(五); mServiceText=(TextView)v.findViewById(R.id.text); } } 类服务单元模型{ 字符串菜单文本; 他当选了; 公共字符串getMenuText(){ 返回菜单文本; } public void setMenuText(字符串menuText){ this.menuText=menuText; } 公选{ 选举产生的回报; } 已选择公共无效设置(已选择布尔值){ isSelected=已选择; } } }
我没有测试,但它可以工作。主键是使用列表实例 希望对你有帮助。另外,如果您的侦听器对UI进行了一些更改,我会将notify~函数放在使用适配器的位置Android (0,mServiceList.size()); } if(mListener!=null){ mListener.onItemClicked(位置); 解雇(); } } }); } @凌驾 public int getItemCount(){ 返回mServiceList.size(); } 类DataViewHolder扩展了RecyclerView.ViewHolder{ 文本视图mServiceText; DataViewHolder(视图v){ 超级(五); mServiceText=(TextView)v.findViewById(R.id.text); } } 类服务单元模型{ 字符串菜单文本; 他当选了; 公共字符串getMenuText(){ 返回菜单文本; } public void setMenuText(字符串menuText){ this.menuText=menuText; } 公选{ 选举产生的回报; } 已选择公共无效设置(已选择布尔值){ isSelected=已选择; } } },android,android-recyclerview,Android,Android Recyclerview,我没有测试,但它可以工作。主键是使用列表实例 希望对你有帮助。另外,如果您的侦听器对UI进行了一些更改,我会将notify~函数放在使用适配器的位置 package net.deali.ssmarket.view; import android.support.v7.widget.RecyclerView; import android.util.SparseBooleanArray; import android.view.LayoutInflater; import android.vie
package net.deali.ssmarket.view;
import android.support.v7.widget.RecyclerView;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import net.deali.ssmarket.R;
import java.util.List;
import static android.media.CamcorderProfile.get;
/**
* Created by soochun on 2017-04-24.
*/
class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.DataViewHolder> {
List<ServicesMenuModel> mServiceList;
ItemAdapter(int itemCount, List<ServicesMenuModel> mServiceList) {
this.mServiceList = mServiceList;
}
@Override
public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_item_list_dialog_item6, parent, false);
return new DataViewHolder(v);
}
public void changeAt(int position, DataViewHolder holder) {
notifyItemChanged(position);
holder.mServiceText.setSelected(false);
}
@Override
public void onBindViewHolder(final DataViewHolder holder, final int position) {
final ServicesMenuModel item = mServiceList.get(position);
holder.mServiceText.setText(item.getMenuText());
holder.mServiceText.setSelected(item.isSelected());
holder.mServiceText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean setValue = !item.isSelected();
item.setSelected(setValue);
notifyItemChanged(position, item);
//if even one item is selected, should make other items make unselected.
if (setValue) {
int i = 0;
for (ServicesMenuModel servicesMenuModel : mServiceList) {
if (i != position) {
servicesMenuModel.setSelected(false);
}
i++;
}
notifyDataSetChanged(); //if recyclerView move top postion try to use notifyItemRangeChanged(0, mServiceList.size());
}
if (mListener != null) {
mListener.onItemClicked(position);
dismiss();
}
}
});
}
@Override
public int getItemCount() {
return mServiceList.size();
}
class DataViewHolder extends RecyclerView.ViewHolder {
TextView mServiceText;
DataViewHolder(View v) {
super(v);
mServiceText = (TextView) v.findViewById(R.id.text);
}
}
class ServicesMenuModel {
String menuText;
boolean isSelected;
public String getMenuText() {
return menuText;
}
public void setMenuText(String menuText) {
this.menuText = menuText;
}
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
}
}
package net.deali.ssmarket.view;
导入android.support.v7.widget.RecyclerView;
导入android.util.SparseBooleanArray;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
进口净额.deali.ssmarket.R;
导入java.util.List;
导入静态android.media.CamcorderProfile.get;
/**
*由soochun于2017年4月24日创建。
*/
类ItemAdapter扩展了RecyclerView.Adapter{
服务列表;
ItemAdapter(int itemCount、List mServiceList){
this.mServiceList=mServiceList;
}
@凌驾
public DataViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.fragment\u item\u list\u dialog\u item6,parent,false);
返回新的DataViewHolder(v);
}
公共无效更改(int位置,数据视图持有者){
(职位)变更;
holder.mServiceText.setSelected(假);
}
@凌驾
公共无效onBindViewHolder(最终数据视图持有人,最终整数位置){
final ServicesMenuModel item=mServiceList.get(位置);
holder.mServiceText.setText(item.getMenuText());
holder.mServiceText.setSelected(item.isSelected());
holder.mServiceText.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
布尔集合值=!item.isSelected();
项目.setSelected(setValue);
通知项目变更(位置、项目);
//即使选择了一个项目,也应使其他项目处于未选择状态。
如果(设置值){
int i=0;
对于(ServicesMenuModel ServicesMenuModel:mServiceList){
如果(i!=位置){
servicesMenuModel.setSelected(false);
}
i++;
}
notifyDataSetChanged();//如果recyclerView移动顶部位置尝试使用notifyItemRangeChanged(0,mServiceList.size());
}
if(mListener!=null){
mListener.onItemClicked(位置);
解雇();
}
}
});
}
@凌驾
public int getItemCount(){
返回mServiceList.size();
}
类DataViewHolder扩展了RecyclerView.ViewHolder{
文本视图mServiceText;
DataViewHolder(视图v){
超级(五);
mServiceText=(TextView)v.findViewById(R.id.text);
}
}
类服务单元模型{
字符串菜单文本;
他当选了;
公共字符串getMenuText(){
返回菜单文本;
}
public void setMenuText(字符串menuText){
this.menuText=menuText;
}
公选{
选举产生的回报;
}
已选择公共无效设置(已选择布尔值){
isSelected=已选择;
}
}
}
我想您的要求是一次选择一个项目。我建议使用以下方法,而不是保留布尔值数组
声明一个变量以保存适配器类中最后一个选定项的索引
int mLastSelectedIndex = -1;
在ViewHolder中定义如下的onClick方法
void setUpOnClick(final int position) {
boolean selection = position == mLastSelectedPosition;
mServiceText.setSelected(selection);
mServiceText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int tempOldIndex = mLastSelectedPosition;
mLastSelectedPosition = position;
if (tempOldIndex >= 0) {
notifyItemChanged(tempOldIndex);
}
notifyItemChanged(position);
// your regular code
}
}
}
最后,在onBindViewHolder中调用它
@Override
public void onBindViewHolder(final DataViewHolder holder, int position {
holder.setUpOnClick(position);
// your regular code
}
我想你的要求是一次只选一项。我建议使用以下方法,而不是保留布尔值数组
声明一个变量以保存适配器类中最后一个选定项的索引
int mLastSelectedIndex = -1;
在ViewHolder中定义如下的onClick方法
void setUpOnClick(final int position) {
boolean selection = position == mLastSelectedPosition;
mServiceText.setSelected(selection);
mServiceText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int tempOldIndex = mLastSelectedPosition;
mLastSelectedPosition = position;
if (tempOldIndex >= 0) {
notifyItemChanged(tempOldIndex);
}
notifyItemChanged(position);
// your regular code
}
}
}
最后,在onBindViewHolder中调用它
@Override
public void onBindViewHolder(final DataViewHolder holder, int position {
holder.setUpOnClick(position);
// your regular code
}
这是BottomSheetDialogFragment监听器,我们现在可以忽略它。这是BottomSheetDialogFragment监听器,我们现在可以忽略它。对于单个项目选择,它正在工作。但是如果我单击同一个项目,我需要创建视图gone@RakshitNawani也许你可以这样试试。布尔选择=位置==mLastSelectedPosition;布尔值isSelected=mServiceText.isSelected();mServiceText.setSelected(选择和选择);对于单个项目选择,它正在工作,但是如果单击同一项目,我需要创建视图gone@RakshitNawani也许你可以这样试试。布尔选择=位置==mLastSelectedPosition;布尔值isSelected=mServiceText.isSelected();mServiceText.setSelected(选择和选择);
@Override
public void onBindViewHolder(final DataViewHolder holder, int position {
holder.setUpOnClick(position);
// your regular code
}