我有一个包含一些项目的列表视图,我希望允许用户通过按住项目来预览特定项目的数据。我希望只要用户按下,预览窗口/弹出窗口就会保持显示状态。
我正在尝试在IOS和Instagram中使用相同的预览功能
我已经在longpress上实现了但不确定为获得理想结果而展示的最佳内容
lv.setAdapter(arrayAdapter);
lv.setLongClickable(true);
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
Log.v("long clicked", "pos: " +pos);
return true;
}
});
有关如何实施该方法或实施该方法的最佳方法的任何提示?
答案 0 :(得分:3)
我正在使用带图像的回收站视图。
要显示图像,我使用长按监听器调用此方法:
public void publicationQuickView(Post post){
View view = getLayoutInflater().inflate( R.layout.quick_view, null);
ImageView postImage = (ImageView) view.findViewById(R.id.ivFeedCenter);
ImageView profileImage = (ImageView) view.findViewById(R.id.ivUserProfile);
TextView tvUsername = (TextView) view.findViewById(R.id.txtUsername);
tvUsername.setText(post.user.name);
Picasso.with(this).load(post.picture).priority(Picasso.Priority.HIGH).noPlaceholder().into(postImage);
Picasso.with(this).load(post.user.picture).noPlaceholder().into(profileImage);
builder = new Dialog(this);
builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
builder.getWindow().setBackgroundDrawable(
new ColorDrawable(Color.TRANSPARENT));
builder.setContentView(view);
builder.show();
}
我给布局充气并注入对话框。
要解除对话框,我正在使用RecyclerView.OnItemTouchListener(),如下所示:
rvUserProfile.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
if(e.getAction() == MotionEvent.ACTION_UP)
hideQuickView();
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent event) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}});
最后:
public void hideQuickView(){
if(builder != null) builder.dismiss();
}
答案 1 :(得分:0)
请参阅以下有关如何使用回收者视图处理长按的答案:RecyclerView onClick
完成后,您可以显示布局以显示数据。
答案 2 :(得分:0)
检查出来......
在长按一下监听器上实现一个监听器
how to implement a long click listener on a listview
然后启用隐藏视图的可见性。在这样做的同时,请查看此链接,了解如何启用预览窗格的动态位置
答案 3 :(得分:0)
您可以在视图中添加自定义OnTouchListener
,代表您ListView
(或RecyclerView
或其他)中的给定项目。这允许您检测手势何时开始(即第一根手指向下)末端(即最后一根手指向上)或被取消(例如手势实际上是滚动并且已被ListView
截获)。
你需要做的代码看起来像这样:
itemView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int actionMasked = event.getActionMasked();
switch (actionMasked) {
case MotionEvent.ACTION_DOWN:
// show preview
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// hide preview
break;
default:
}
return true;
}
});
编辑:您可能需要包含一些逻辑来检测简单的点击(例如,衡量整个动作是否持续时间不超过ViewConfiguration.getTapTimeout()
)并调用v.performClick()
。< / p>