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