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 (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

我没有测试,但它可以工作。主键是使用列表实例

希望对你有帮助。另外,如果您的侦听器对UI进行了一些更改,我会将notify~函数放在使用适配器的位置

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
}