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()
我已经使用自定义ActionMode回调实现了同样的功能。我们可以通过在recyclerView适配器的OnBindViewWholder中设置textview.CustomSelectionActionModeCallback,将自定义操作模式回调设置为recyclerView项的特定textview。在自定义回调中,我们可以使用当前位置和选定的文本。OnBindViewWholder将如下所示。
public void onBindViewHolder(myViewHolder holder, int position) {
//code
holder.textview. setCustomSelectionActionModeCallback(new CustomSelectionCallback(holder.taskName, position, mContext));
}
在自定义回调中,我们可以随项目的位置发送任何内容。自定义选择回调可以按如下方式实现。
public class CustomSelectionCallback implements ActionMode.Callback {
private TextView mTextView;
private int position;
private Context mContext;
public CustomSelectionCallback(TextView text, int pos, Context context) {
this.mTextView = text;
this.position = pos;
this.mContext = context;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
int start = mTextView.getSelectionStart();
int end = mTextView.getSelectionEnd();
Spannable wordtoSpan = (Spannable) mTextView.getText();
wordtoSpan.setSpan(new BackgroundColorSpan(Color.TRANSPARENT), start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//copy the text when Copy Action Mode is clicked
if (item.getItemId() == android.R.id.copy) {
copyText(start, end);
mode.finish();
return true;
} else if (item.getItemId() == android.R.id.shareText) {
shareText(start, end);
mode.finish();
return true;
} else if (item.getItemId() == android.R.id.selectAll) {
selectAllText();
return true;
}
return true;
}
/**
* implement select all functionality id ActionMOde Menu
*/
private void selectAllText() {
Selection.setSelection((Spannable) mTextView.getText(), 0, mTextView.length());
}
private void shareText(int start, int end) {
CharSequence selectedTxt = mTextView.getText().subSequence(start, end);
String shareBody = selectedTxt.toString();
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
mContext.startActivity(Intent.createChooser(sharingIntent, "SHARE"));
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
/**
* copy the selected text with start and end param to clipboard
*
* @param start start point of selection of the text view
* @param end end point of selection of the text view
*/
private void copyText(int start, int end) {
ClipboardManager clipboardManager = (ClipboardManager) mContext.
getSystemService(Context.CLIPBOARD_SERVICE);
CharSequence selectedTxt = mTextView.getText().subSequence(start, end);
ClipData clipData = ClipData.newPlainText("selected text label", selectedTxt);
assert clipboardManager != null;
clipboardManager.setPrimaryClip(clipData);
Toast.makeText(mContext, selectedTxt.toString() + " position " + position, Toast.LENGTH_LONG).show();
}
当我使用ListView时-
在recyclerView中获取已点击项目的位置,我在recyclerView中创建cardview和链接 我想获取位置,将开关盒设置为每个卡视图的意向活动 当我点击card view I时,他会打开另一个页面,当你点击card view 2时,他会打开另一个页面。 看看我的密码 在recyclerView中获取已点击项目的位置,我在recyclerView中创建cardview和链接 我想获取位
我有一个带有和的activity。我正在使用水平显示图像列表。当我单击中的图像时,activity中的将显示该图像的更大图片。到目前为止一切正常。 现在activity中又多了两个:和。当我单击时,中的图像应该向左转,并且中的缩略图应该反映这个变化。的情况也类似。 我可以旋转。但是,如何在中旋转缩略图呢?如何获取的? 代码: activity XML: 我的activity代码: 我得Recycl
问题内容: 我正在尝试通过GPS功能获取用户的当前位置, 编写了一个实现的简单类 通过一个简单的动作,我正在访问这些经度和纬度值 但是它总是返回0.0作为结果。无法找出问题所在。 问题答案: 您必须在onCreate()返回之后才能触发您的位置更新回调。如果您将经纬度变量初始化为虚拟值,则可能会看到您正在打印这些值。 在onLocationChanged中添加一些日志记录,以便可以看到它已被触发,
问题内容: 我有一个与和一起进行的活动。我正在使用来水平显示图像列表。当我点击在图像上的在活动中应显示图像的大局观。到目前为止,一切正常。 现在,活动中还有两个:和。当我单击时,中的图像应左移,并且中的缩略图也应反映此更改。与的情况类似。 我能够旋转。但是,如何旋转缩略图?我如何获得的? 码: 活动XML: 我的活动代码: 我的RecyclerView自定义适配器: 问题答案: 我想您正在使用a
如何在中获取当前项?在我的用例中,RV项占用了所有屏幕空间,因此一次只有一个项。我以前试过谷歌,但没有找到任何有用的东西。