如何为ListItem创建自定义上下文菜单(如在Baconreader中)?

时间:2011-12-16 07:13:31

标签: android listview contextmenu

因此,我有兴趣在长按每个列表项时为其创建自定义上下文菜单。我在Baconreader应用程序中看到了这个,并认为它会像下面那样简单:

  1. 在填充listview时创建一个LinearLayout(或任何内容)
  2. 长按项目时,隐藏项目(View.GONE)并将LinearLayout添加到列表项目的父项。
  3. 如果需要,请显示列表项并从其父级中删除LinearLayout。
  4. 我成功地设法隐藏列表项onItemLongClick,但事实证明你不能将视图添加到ListView(d'oh)。但这必须是培根重建者做到这一点的方式。我无法弄清楚。这是我尝试的一些代码:

    listView.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0,
            View arg1, int arg2, long arg3) {
                 arg1.setVisibility(View.GONE); // hide the list item, works
    
                 // trying to add a TextView after a list
                 // item's position, doesn't work.
                 listView.addView(textView, arg2);
    
                 return true;
        }
    });
    

    以下是一个示例:A screenshot from my lovely Nexus S

    因此隐藏了列表项,并且自定义上下文菜单(看起来像ViewGroup)直接放在列表项的位置上。但是如何?

    编辑:已解决。更新的代码:

    list_item.xml          

        <TextView
            android:id="@+id/list_item_title"
            .....
         />
    
    </FrameLayout>
    

    java代码

    listView.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0,
            View arg1, int arg2, long arg3) {
                 ((FrameLayout)arg1).addView(w);
                 return true;
        }
    });
    

    当然,您必须使用SimpleAdapter而不是ArrayAdapter。

1 个答案:

答案 0 :(得分:2)

快速提示:如果您不隐藏列表项并将上下文菜单添加到列表中,而是将上下文菜单添加到列表项中,该怎么办?

例如,将列表项的当前布局包装到FrameLayout中。然后,当长按时,只需将上下文菜单添加到此FrameLayout中? (如果需要,隐藏FrameLayout的第一个子节点)。这也可以保证上下文菜单与列表项具有相同的大小。

相关问题