2010-11-15 120 views
4

这个问题的答案可能非常明显,但它让我头痛。我有一个简单的LinearLayout,其中只有一个ListView。我这样做:的onCreateregisterForContextMenu没有得到正确的调用 - 我做错了什么?

public void onCreate(Bundle b) { 
     super.onCreate(b); 
     setContentView(R.layout.friends); 
     ListView listView = (ListView) findViewById(R.id.friend_list); 
     listAdapter = new CheckinListAdapter(checkins, listView, R.layout.checkin_list_item); 
     listView.setAdapter(listAdapter); 

     if (getLastNonConfigurationInstance() != null) { 
      FriendsActivity last = (FriendsActivity) getLastNonConfigurationInstance(); 
      this.checkins.addAll(last.checkins); 
      this.sort = last.sort; 
     } else { 
      refresh(); 
     } 
     registerForContextMenu(listView); 
    } 

但由于某些原因onCreateContextMenu不会被调用!所以我做了一些研究,因为我在寄存器后加载列表,可能它没有正确注册它。如果我进入我的ListAdapter并执行registerForContextMenu它确实显示出来。但它在键盘上表现不正确。所以我现在对什么可能是错误感到困惑,因为我必须注册每个子项目似乎有点不直观。我在网上找到的所有例子都使用ArrayAdapter。 ?:(

任何建议

编辑

这里有更详细的,如果它的东西我不明白:

我的XML文件

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <Button android:text="@string/check_in" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:onClick="onCheckInClicked"/> 

    <ListView android:id="@+id/friend_list" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"/> 
</LinearLayout> 

列表项目xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingTop="5dip" 
     android:paddingBottom="5dip"> 
    <ImageView android:id="@+id/user_photo" 
       android:layout_width="40dip" 
       android:layout_height="40dip" 
       android:scaleType="centerCrop"/> 

    <LinearLayout android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        android:layout_marginLeft="8dip"> 
     <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> 
      <Button android:id="@+id/user" style="@style/TextButton"/> 

      <TextView android:text="@string/at" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content"/> 

      <Button android:id="@+id/venue" 
        android:singleLine="true" 
        android:ellipsize="end" 
        style="@style/TextButton"/> 

     </LinearLayout> 

     <TextView android:id="@+id/venue_address" style="@style/GreyLarge"/> 

     <LinearLayout android:id="@+id/checkin_detail" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginTop="6dip" 
         android:layout_marginBottom="6dip"> 

      <ImageView android:id="@+id/checkin_image" 
         android:layout_width="70dip" 
         android:layout_height="60dip" 
         android:layout_marginRight="8dip" 
         android:scaleType="centerCrop"/> 

      <TextView android:id="@+id/checkin_shout" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content"/> 

     </LinearLayout> 

     <TextView android:id="@+id/elapsedTime" style="@style/GreySmall"/> 
    </LinearLayout> 
</LinearLayout> 

回答

13

这花了我6个小时搞清楚但事实证明,我不得不添加:

android:focusable="false" 

我所有<Button/>标签。

相关岗位:TextView and Button in each row and onListItemClick()

+0

在我的情况下,列表项有一个复选框。上下文菜单最初不起作用,但是一旦将复选框的focusable设置为false,它就起作用了。 – mvsagar 2014-08-04 14:23:12

0

Do,registerForContextMenu(listView); 设置适配器之前,即:

listView.setAdapter(listAdapter);

您已经提到菜单没有正确响应键盘操作。你能告诉我究竟是什么问题吗?

+0

嗨Swathi - 我搬到registerForContextMenu findViewById()之后,我仍然没有看到任何发生的事情。我之前的意思是使用滚轮我无法打开上下文菜单。但通过使用鼠标,我可以点击并按住打开。这是我用过的示例https://github.com/mikeplate/ListViewDemo – 2010-11-15 16:58:53

+1

嗨Amir,据我所知,当我们对视图执行长按操作时,会显示上下文菜单。此链接可能会帮助您 - http:// developer.android.com/guide/topics/ui/menus.html – 2010-11-16 05:01:13