Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果我使用recyclerview,当我长时间单击项目上的任何位置时,如何选择单选按钮_Android_Android Recyclerview - Fatal编程技术网

Android 如果我使用recyclerview,当我长时间单击项目上的任何位置时,如何选择单选按钮

Android 如果我使用recyclerview,当我长时间单击项目上的任何位置时,如何选择单选按钮,android,android-recyclerview,Android,Android Recyclerview,当我长时间点击物品时,我在RecyclerView中的select单选按钮出现问题 目前,我已经设置了RecyclerView,有一个默认的LayoutManager,还有一个显示所有数据的适配器。我最近刚刚让onClickListener()工作(尽管我不确定它应该放在onCreateViewHolder()还是onBindViewHolder*(-不确定何时调用onBindViewHolder()) 我的SingleRow XML <RelativeLayout xmlns:andro

当我长时间点击物品时,我在RecyclerView中的select单选按钮出现问题

目前,我已经设置了RecyclerView,有一个默认的LayoutManager,还有一个显示所有数据的适配器。我最近刚刚让onClickListener()工作(尽管我不确定它应该放在onCreateViewHolder()还是onBindViewHolder*(-不确定何时调用onBindViewHolder())

我的SingleRow XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dp"

>


<ImageView
    android:id="@+id/item_icon"
    android:layout_width="64dp"
    android:layout_height="64dp"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="1dp"
    android:layout_marginBottom="1dp"
    android:contentDescription="icon"
    android:src="@drawable/ic_launcher"
    />


<TextView
    android:id="@+id/item_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/item_icon"
    android:layout_alignBaseline="@+id/item_icon"
    android:textColor="@android:color/darker_gray"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:textSize="22dp" />

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radioButton"
    android:layout_centerVertical="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

带有单选模式和ViewHolder的我的适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private static RadioButton lastChecked = null;
private static int lastCheckedPos = 0;
Context context;
private ArrayList<ItemData> itemsDatas;


public MyAdapter(ArrayList<ItemData> itemsDatas) {
    this.itemsDatas = itemsDatas;
}


@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {

    View itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_layout, null);


    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}


@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {


    if (position == 0 && itemsDatas.get(0).isSelected() && viewHolder.radioButton.isChecked()) {
        viewHolder.radioButton.setActivated(true);
        viewHolder.radioButton.setSelected(true);
        lastChecked = viewHolder.radioButton;
        lastCheckedPos = 0;
    }

    viewHolder.txtViewTitle.setText(itemsDatas.get(position).getTitle1());

    viewHolder.imgViewIcon.setImageResource(itemsDatas.get(position).getImageUrl());

    viewHolder.radioButton.setTag(this);
    viewHolder.radioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RadioButton cb = (RadioButton) v;


            if (cb.isChecked()) {
                if (lastChecked != null) {
                    lastChecked.setChecked(false);
                    itemsDatas.get(lastCheckedPos).setIsSelected(false);
                }

                lastChecked = cb;
                lastCheckedPos = position;
            } else
                lastChecked = null;

            itemsDatas.get(position).setIsSelected(cb.isChecked());
        }
    });


}


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

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

    public TextView txtViewTitle;
    public ImageView imgViewIcon;
    public RadioButton radioButton;


    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);
        itemLayoutView.setOnClickListener(this);
        itemLayoutView.setOnLongClickListener(this);
        txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
        imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
        radioButton = (RadioButton) itemLayoutView.findViewById(R.id.radioButton);
    }

    @Override
    public void onClick(View v) {
        Log.d("TAG", "onClick " + getPosition() + " " + txtViewTitle.getText().toString());
    }

    @Override
    public boolean onLongClick(View v) {
        Log.d("TAG", "onLongClick " + getPosition() + " " + txtViewTitle.getText().toString());
        return true;
    }
}}
 class ViewHolder extends RecyclerView.ViewHolder {

public TextView txtViewTitle;
public ImageView imgViewIcon;
public RadioButton radioButton;


public ViewHolder(View itemLayoutView) {
    super(itemLayoutView);

    .
    txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
    imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
    radioButton = (RadioButton) itemLayoutView.findViewById(R.id.radioButton);
    itemLayoutView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        //what ever you want
        }
    });
    itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if(!radioButton.isSelected()){
                radioButton.setSelected(true);
            }else{
                radioButton.setSelected(false);
            }
            return false;
        }
    });
}
公共类MyAdapter扩展了RecyclerView.Adapter{ 私人静态RadioButton lastChecked=null; 私有静态int lastCheckedPos=0; 语境; 私有数组列表项数据; 公共MyAdapter(ArrayList itemsDatas){ this.itemsDatas=itemsDatas; } @凌驾 public MyAdapter.ViewHolder onCreateViewHolder(视图组父级, int视图类型){ View itemLayoutView=LayoutFlater.from(parent.getContext()) .充气(R.layout.item_布局,空); ViewHolder ViewHolder=新的ViewHolder(itemLayoutView); 返回视图持有者; } @凌驾 公共无效onBindViewHolder(ViewHolder ViewHolder,最终int位置){ if(position==0&&itemsDatas.get(0.isSelected()&&viewHolder.radioButton.isChecked()){ viewHolder.radioButton.setActivated(真); viewHolder.radioButton.setSelected(真); lastChecked=viewHolder.radioButton; lastCheckedPos=0; } viewHolder.txtViewTitle.setText(itemsDatas.get(position.getTitle1()); viewHolder.imgViewIcon.setImageResource(itemsDatas.get(position.getImageUrl()); viewHolder.radioButton.setTag(此); viewHolder.radioButton.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ 单选按钮cb=(单选按钮)v; if(cb.isChecked()){ 如果(lastChecked!=null){ lastChecked.setChecked(false); itemsDatas.get(lastCheckedPos.setIsSelected)(false); } 最后检查=cb; lastCheckedPos=位置; }否则 lastChecked=null; itemsDatas.get(position).setIsSelected(cb.isChecked()); } }); } @凌驾 public int getItemCount(){ 返回itemsDatas.size(); } 公共静态类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener、View.OnLongClickListener{ 公共文本视图txtViewTitle; 公共图像视图imgViewIcon; 公共单选按钮单选按钮; 公共视图持有者(视图项布局视图){ 超级(itemLayoutView); itemLayoutView.setOnClickListener(此); itemLayoutView.setOnLongClickListener(此); txtViewTitle=(TextView)itemLayoutView.findViewById(R.id.item_title); imgViewIcon=(ImageView)itemLayoutView.findViewById(R.id.item_图标); radioButton=(radioButton)itemLayoutView.findViewById(R.id.radioButton); } @凌驾 公共void onClick(视图v){ Log.d(“TAG”、“onClick”+getPosition()+“”+txtViewTitle.getText().toString()); } @凌驾 仅长按公共布尔值(视图v){ Log.d(“TAG”、“onLongClick”+getPosition()+“”+txtViewTitle.getText().toString()); 返回true; } }} 当我点击单选按钮,这是工作,但我想要的是,当我长按项目的任何地方,我想选择这个项目的单选按钮 当我点击项目的任何地方时,我不想将其用于其他工作

我试过很多解决办法 但没有成功


非常感谢您的帮助。谢谢。

如果我没有弄错,您是在问您应该在哪里设置
onLongClickListener
,在这种情况下,请修改
onCreateViewHolder
方法,如下所示:

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {

    View itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_layout, null);

   itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            //do something
            return true;
        }
    });
    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}

如果我没有弄错,您会询问应该在哪里设置
onlongclicklister
,在这种情况下,请修改
onCreateViewHolder
方法,如下所示:

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {

    View itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_layout, null);

   itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            //do something
            return true;
        }
    });
    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}

这是ViewHolder的修订版

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private static RadioButton lastChecked = null;
private static int lastCheckedPos = 0;
Context context;
private ArrayList<ItemData> itemsDatas;


public MyAdapter(ArrayList<ItemData> itemsDatas) {
    this.itemsDatas = itemsDatas;
}


@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {

    View itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_layout, null);


    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}


@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {


    if (position == 0 && itemsDatas.get(0).isSelected() && viewHolder.radioButton.isChecked()) {
        viewHolder.radioButton.setActivated(true);
        viewHolder.radioButton.setSelected(true);
        lastChecked = viewHolder.radioButton;
        lastCheckedPos = 0;
    }

    viewHolder.txtViewTitle.setText(itemsDatas.get(position).getTitle1());

    viewHolder.imgViewIcon.setImageResource(itemsDatas.get(position).getImageUrl());

    viewHolder.radioButton.setTag(this);
    viewHolder.radioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RadioButton cb = (RadioButton) v;


            if (cb.isChecked()) {
                if (lastChecked != null) {
                    lastChecked.setChecked(false);
                    itemsDatas.get(lastCheckedPos).setIsSelected(false);
                }

                lastChecked = cb;
                lastCheckedPos = position;
            } else
                lastChecked = null;

            itemsDatas.get(position).setIsSelected(cb.isChecked());
        }
    });


}


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

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

    public TextView txtViewTitle;
    public ImageView imgViewIcon;
    public RadioButton radioButton;


    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);
        itemLayoutView.setOnClickListener(this);
        itemLayoutView.setOnLongClickListener(this);
        txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
        imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
        radioButton = (RadioButton) itemLayoutView.findViewById(R.id.radioButton);
    }

    @Override
    public void onClick(View v) {
        Log.d("TAG", "onClick " + getPosition() + " " + txtViewTitle.getText().toString());
    }

    @Override
    public boolean onLongClick(View v) {
        Log.d("TAG", "onLongClick " + getPosition() + " " + txtViewTitle.getText().toString());
        return true;
    }
}}
 class ViewHolder extends RecyclerView.ViewHolder {

public TextView txtViewTitle;
public ImageView imgViewIcon;
public RadioButton radioButton;


public ViewHolder(View itemLayoutView) {
    super(itemLayoutView);

    .
    txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
    imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
    radioButton = (RadioButton) itemLayoutView.findViewById(R.id.radioButton);
    itemLayoutView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        //what ever you want
        }
    });
    itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if(!radioButton.isSelected()){
                radioButton.setSelected(true);
            }else{
                radioButton.setSelected(false);
            }
            return false;
        }
    });
}

这是ViewHolder的修订版

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private static RadioButton lastChecked = null;
private static int lastCheckedPos = 0;
Context context;
private ArrayList<ItemData> itemsDatas;


public MyAdapter(ArrayList<ItemData> itemsDatas) {
    this.itemsDatas = itemsDatas;
}


@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {

    View itemLayoutView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_layout, null);


    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}


@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {


    if (position == 0 && itemsDatas.get(0).isSelected() && viewHolder.radioButton.isChecked()) {
        viewHolder.radioButton.setActivated(true);
        viewHolder.radioButton.setSelected(true);
        lastChecked = viewHolder.radioButton;
        lastCheckedPos = 0;
    }

    viewHolder.txtViewTitle.setText(itemsDatas.get(position).getTitle1());

    viewHolder.imgViewIcon.setImageResource(itemsDatas.get(position).getImageUrl());

    viewHolder.radioButton.setTag(this);
    viewHolder.radioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RadioButton cb = (RadioButton) v;


            if (cb.isChecked()) {
                if (lastChecked != null) {
                    lastChecked.setChecked(false);
                    itemsDatas.get(lastCheckedPos).setIsSelected(false);
                }

                lastChecked = cb;
                lastCheckedPos = position;
            } else
                lastChecked = null;

            itemsDatas.get(position).setIsSelected(cb.isChecked());
        }
    });


}


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

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

    public TextView txtViewTitle;
    public ImageView imgViewIcon;
    public RadioButton radioButton;


    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);
        itemLayoutView.setOnClickListener(this);
        itemLayoutView.setOnLongClickListener(this);
        txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
        imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
        radioButton = (RadioButton) itemLayoutView.findViewById(R.id.radioButton);
    }

    @Override
    public void onClick(View v) {
        Log.d("TAG", "onClick " + getPosition() + " " + txtViewTitle.getText().toString());
    }

    @Override
    public boolean onLongClick(View v) {
        Log.d("TAG", "onLongClick " + getPosition() + " " + txtViewTitle.getText().toString());
        return true;
    }
}}
 class ViewHolder extends RecyclerView.ViewHolder {

public TextView txtViewTitle;
public ImageView imgViewIcon;
public RadioButton radioButton;


public ViewHolder(View itemLayoutView) {
    super(itemLayoutView);

    .
    txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
    imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
    radioButton = (RadioButton) itemLayoutView.findViewById(R.id.radioButton);
    itemLayoutView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        //what ever you want
        }
    });
    itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if(!radioButton.isSelected()){
                radioButton.setSelected(true);
            }else{
                radioButton.setSelected(false);
            }
            return false;
        }
    });
}

我看不出你在哪里设置了单选按钮的长点击监听器@cricket_007的可能副本你可以在公共静态类viewholder中看到它。你的长点击似乎对单选按钮没有任何作用,这就是我的意思say@cricket_007我看到了这个链接,但没有帮助我看不到你在哪里设置了长点击监听器f或者单选按钮@cricket_007的可能副本,你可以在公共静态类viewholder中看到它。你长时间的点击似乎对单选按钮没有任何作用,这就是我想要的say@cricket_007我看到了这个链接,但没有帮助。我的问题是,当我长时间单击项目时,如何选择RadioButton。我的问题是如何选择RadioButton当我长时间点击项目谢谢但不成功谢谢但不成功