如何在长按ListView中的项目时显示新视图?

时间:2014-11-14 07:03:13

标签: android listview view long-press

我正在定制包含30个项目的ListView,当我长按特定项目时我想隐藏该特定项目并在该特定项目中显示某些xml视图直到长按并且当我从该项目释放我的手指时它必须显示他的旧项目(即我想要显示之前隐藏的项目)。

任何人都可以提出任何想法来完成这项任务!

5 个答案:

答案 0 :(得分:1)

试试这个

参考:Detecting a long press with Android

    @Override
public boolean onTouchEvent(MotionEvent event, MapView mapView){
    if(event.getAction() == MotionEvent.ACTION_DOWN)
        //hide wat u want to hide
    if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP))
        //show want to show
    return super.onTouchEvent(event, mapView);
}

注意:链接可能会破坏,因此会粘贴代码。 在你的onitemlongclick或onitemclick

的开关中
    yourlistview.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position,
            long arg3) {

        switch (position) {

        case 0:

            final TextView t = (TextView)arg1.findViewById(R.id.tview_homeoptions);
            arg0.setOnTouchListener(new OnTouchListener() {//arg0 is the view of selected position

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if(event.getAction() == MotionEvent.ACTION_DOWN)
                        {t.setTextColor(Color.parseColor("#ff0000"));}
                    if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP))
                        {t.setText("up");}
                    return false;
                }
            });
            break;
        case 1:
            //todo
            break;
         case 2:
            //todo
            break;
        //so on

        default:
            break;
        }
希望它有效。

答案 1 :(得分:0)

您可以执行以下操作。

对于ListView项目,创建一个FrameLayout,其中包括列表项目布局( layout1 )和布局,其中应该在长按( layout2 )时显示该视图将其可见性设置为消失

没有创建长按听众并制作

layout1.setVisibility(View.GONE);
layout2.setVisibility(View.Visible);

并恢复

layout1.setVisibility(View.Visible);
layout2.setVisibility(View.GONE);

答案 2 :(得分:0)

您必须执行以下操作:

将longclick侦听器设置为列出项目,并在onItemLongClick函数中更改视图

  listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        public boolean onItemLongClick(AdapterView<?> arg0, View v,
                int index, long arg3) {
            // TODO change you view at index
            return true;
        }
  }); 

答案 3 :(得分:0)

首先通过listview引用上的setOnTouchListener()使用onTouch(View视图,MotionEvent motionEvent)OnTouchListener()来获取MotionEvent.ACTION_UP和MotionEvent.ACTION_DOWN事件(也使用return false,否则你会阻止事件流正常列表视图事件)。

然后您可以在列表项的xml布局中包含视图,并使用适配器设置单击项目位置,该位置将隐藏布局设置为可见并调用notifyDataSetchanged();在适配器引用,

修改

您也可以使用listview的setOnItemLongPressListener()获取长按事件,然后捕获ACTION_UP事件。

答案 4 :(得分:0)

这里有完整的代码: 你的listItem.xml:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/longClickedView"
        android:text="long click"
        android:background="#99cc00"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"/>
    <TextView
    android:id="@+id/normalView"
    android:text="normal"
    android:background="#cc0011"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</FrameLayout>

并在您的活动/片段中:

list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                view.findViewById(R.id.normal).setVisibility(View.GONE);
                view.findViewById(R.id.longClicked).setVisibility(View.VISIBLE);
                return true;
            }
        });