【发布时间】:2017-09-28 22:41:18
【问题描述】:
在我的适配器项目中可以选择显示弹出窗口,例如copy、cut 等,现在我如何才能在recyclerView 项目和位置上获取选定的文本部分?我阅读了有关找到此解决方案的更多文档,但我不知道该怎么做
这是我的适配器,我想获得选定的部分文本和位置:
public class ShowBookContentsAdapter extends RecyclerView.Adapter<ShowBookContentsAdapter.ShowBookContentsViewHolder> {
private List<Contents> list;
private Context context;
...
private fontFace setFontFace = fontFace.SHABNAM;
public ShowBookContentsAdapter(List<Contents> items, Context mContext, IonChangeBottomViewVisibility mOnChangeBottomViewVisibility, IonSelectText mIonSelectText) {
list = items;
context = mContext;
ionChangeBottomViewvisibility = mOnChangeBottomViewVisibility;
ionSelectText = mIonSelectText;
}
@Override
public ShowBookContentsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int layout = -1;
switch (viewType) {
case 0:
layout = R.layout.item_book_content_paragraph;
break;
}
view = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
holder = new ShowBookContentsViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(ShowBookContentsViewHolder holder, final int position) {
switch (list.get(position).getContentType()) {
case 0:
makeSelectable(holder.book_content_paragraph);
implementingParagraphView(holder, position);
break;
}
}
private void implementingParagraphView(final ShowBookContentsViewHolder mHolder, final int position) {
holder = mHolder;
String content = list.get(position).getContent();
mHolder.book_content_paragraph.removeAllViews();
try {
Reader reader = new StringReader(content);
KetabkhanView ketabkhan = new KetabkhanView(context);
KetabkhanTagProcessor ketabkhanTagProcessor = new KetabkhanTagProcessor();
ketabkhanTagProcessor.parse(reader, ketabkhan);
mHolder.book_content_paragraph.addView(ketabkhan);
} catch (Exception e) {
e.printStackTrace();
Log.e("E ", e.getMessage());
throw new RuntimeException(e);
}
makeSelectable(mHolder.book_content_paragraph);
if (setFontFace == fontFace.SHABNAM)
Utils.overrideFonts(context, mHolder.book_content_paragraph, PersianFontType.SHABNAM);
else if (setFontFace == fontFace.SAHEL)
Utils.overrideFonts(context, mHolder.book_content_paragraph, PersianFontType.SAHEL);
//for show and hide bottom view
mHolder.book_content_paragraph.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ionChangeBottomViewvisibility != null) {
ionChangeBottomViewvisibility.onChange();
}
}
});
}
...
private void makeSelectable(ViewGroup viewGroup) {
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View child = viewGroup.getChildAt(i);
if (child instanceof ViewGroup) {
makeSelectable((ViewGroup) child);
} else if (child instanceof TextView) {
((TextView) child).setTextIsSelectable(true);
((TextView) child).setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize == 0 ? 14 : textSize);
}
}
}
@Override
public int getItemViewType(int position) {
return list.get(position).getContentType();
}
@Override
public int getItemCount() {
return list.size();
}
public int getItemPosition(int itemId) {
return itemPositions.get(itemId);
}
public void setData(List<Contents> mContents) {
list.clear();
list.addAll(mContents);
}
public class ShowBookContentsViewHolder extends RecyclerView.ViewHolder {
@Nullable
@BindView(R.id.book_content_paragraph)
LinearLayout book_content_paragraph;
...
public ShowBookContentsViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
我通过这种方法在项目上制作可选文本:makeSelectable()
【问题讨论】:
-
您是否尝试将 android:textIsSelectable 选项添加到 textView ?
-
@abdulrahmank 选择文本不是我的问题,在用户选择和行位置后,我无法选择部分文本
标签: android