EditText提供错误:TextView不支持文本选择.选择已取消 [英] EditText giving error : TextView does not support text selection. Selection cancelled
问题描述
我有RecyclerView
.位置0的元素是EditText
的标头,然后所有其他元素都是图像.长按EditText
会给出选项粘贴.
但是,当我将回收站"视图滚动到底部,然后再次移到顶部并长按时,它将不会显示粘贴选项,并且会出错.
在滚动到底部并再次滚动到顶部时,调用onBindViewHolder
.
I have RecyclerView
.The element at position is 0 is header for EditText
,then all other elements are images.On long pressing on EditText
it gives option paste.This works fine.
But when I scroll the recycler view to the bottom and again come to top and long press it will not show the paste option and gives error .
On Scrolling to the bottom and again coming to top passes call to onBindViewHolder
.
TextView
:TextView
不支持文本选择.选择已取消.
TextView
: TextView
does not support text selection. Selection cancelled.
public class Someclass extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
private static final int TYPE_EDIT = 0;
private static final int TYPE_IMAGE = 1;
List<String> msomelist = new ArrayList<String>();
public void someMethod(List<String> somelist) {
msomelist.clear();
msomelist.addAll(somelist);
notifyDataSetChanged();
}
public Someclass(Activity activity, List<String> somelist) {
this.activity = activity;
this.msomelist.clear();
this.msomelist.addAll(somelist);
mContext = activity;
}
@Override
public int getItemViewType(int position) {
if (position == 0)
return TYPE_EDIT;
return TYPE_IMAGE;
}
@Override
public void onClick(View view) {
int postition = (int) view.getTag();
msomelist.remove(postition);
notifyDataSetChanged();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
ImageView img;
public ViewHolder(View itemView) {
super(itemView);
img = (ImageView) itemView.findViewById(R.id.image);
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_IMAGE) {
View view = LayoutInflater.from(mContext)
.inflate(somelayout, false);
ViewHolder holder = new ViewHolder(view);
return holder;
} else {
View view = LayoutInflater.from(mContext)
.inflate(someotherlayout, false);
return new OtherHolder(view);
}
}
class OtherHolder extends RecyclerView.ViewHolder {
EditText editText;
public OtherHolder(View itemView) {
super(itemView);
editText = (EditText) itemView.findViewById(R.id.ediItext);
editText.requestFocus();
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolder) {
some function.....
} else if (holder instanceof OtherHolder) {
some function
}
}
}
推荐答案
This is a known bug in the Android platform. I didn't believe it at first, but the code @user2246055 posted is an effective workaround!
我希望将其添加到我的适配器中,而不是子类化TextView:
I preferred to add this in my Adapter instead of subclassing TextView:
@Override
public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {
super.onViewAttachedToWindow(holder);
// Bug workaround for losing text selection ability, see:
// https://code.google.com/p/android/issues/detail?id=208169
holder.textView.setEnabled(false);
holder.textView.setEnabled(true);
}
这篇关于EditText提供错误:TextView不支持文本选择.选择已取消的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!