我在这里遇到的问题是列表项xml中的2个按钮似乎干扰了主活动中的ContextMenu,防止它在长按列表项时膨胀。就像一个注释,按钮本身工作正常。当我删除它们时,ContextMenu可以很好地工作。
列表项xml:
<com.anna.mytallykeeper.views.TallyItemView
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/item_description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textSize="40px"
android:textColor="@color/dijon" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/decrement_button"
android:layout_width="80px"
android:layout_height="80px"
android:layout_centerVertical="true"
android:background="@drawable/minus_button_1" />
<Button android:id="@+id/increment_button"
android:layout_width="80px"
android:layout_height="80px"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:background="@drawable/add_button_1" />
<TextView android:id="@+id/item_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/increment_button"
android:layout_toRightOf="@id/decrement_button"
android:gravity="center_horizontal"
android:textSize="80px"
android:textColor="@color/dijon" />
</RelativeLayout>
</com.anna.mytallykeeper.views.TallyItemView>
main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/piplup">
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
来自主要活动(继承自ListActivity):
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
app = (MyTallyKeeperApplication) getApplication();
adapter = new TallyItemListAdapter(this, app.getTallyItems());
setListAdapter(adapter);
Utility.logI((getListView() == null ?
"ListView is null" : "ListView is not null"));
Utility.logI((getListView().getId() ==
android.R.id.list ? "ListView ID is correct" :"ListView ID is not correct"));
registerForContextMenu(getListView());
}
//
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
Utility.logI(MyTallyKeeperMain.class.getSimpleName() + ".onCreateContextMenu");
super.onCreateContextMenu(menu, v, menuInfo);
if (v.getId() == android.R.id.list) {
getMenuInflater().inflate(R.menu.item_menu, menu);
}
}
从列表适配器类(继承自BaseAdapter):
public View getView(int position, View view, ViewGroup parent) {
TallyItemView tiv;
if (view == null) {
tiv = (TallyItemView)View.inflate(context, R.layout.tally_item_row, null);
} else {
tiv = (TallyItemView)view;
}
tiv.setTallyItem(tallyItems.get(position));
tiv.getDecrementButton().setOnClickListener(new DecrementListener(position));
tiv.getIncrementButton().setOnClickListener(new IncrementListener(position));
return tiv;
}
答案 0 :(得分:3)
我终于找到了如何通过干扰ContextMenu的按钮解决问题:将每个按钮的focusable属性设置为false。
<Button android:id="@+id/increment_button"
android:layout_width="80px"
android:layout_height="80px"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:focusable="false"
android:background="@drawable/add_button_1" />
答案 1 :(得分:0)
我已经完成了列表视图onClick
public void onItemClick(AdapterView<?> view, View arg1, int arg2,
long id) {
openContextMenu(arg1);
并长按
registerForContextMenu(list);
了解更多详情http://groups.google.com/group/android-developers/browse_thread/thread/fe5691bf03af949c
谢谢。