Android 为什么单击listview项会触发CAB?
我是android应用程序开发的新手,现在我被一个问题绊住了。 我的应用程序使用SimpleAdapter作为适配器来填充列表视图,我已经实现了AdapterView.OnItemClickListener 接口并将其注册到listview,还实现了AbsListView.MultichoiceModelListener接口来处理长时间单击事件。但是,当我在列表视图中单击该项时,将触发Android 为什么单击listview项会触发CAB?,android,android-listview,android-contextmenu,Android,Android Listview,Android Contextmenu,我是android应用程序开发的新手,现在我被一个问题绊住了。 我的应用程序使用SimpleAdapter作为适配器来填充列表视图,我已经实现了AdapterView.OnItemClickListener 接口并将其注册到listview,还实现了AbsListView.MultichoiceModelListener接口来处理长时间单击事件。但是,当我在列表视图中单击该项时,将触发onItemClicked()方法并显示CAB,为什么 下面是我的代码: package com.XXX.lis
onItemClicked()
方法并显示CAB,为什么
下面是我的代码:
package com.XXX.listviewdemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button like = null;
private ListView list = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
List<Map<String,String>> data = new ArrayList<Map<String,String>>();
String ITEM1 = "Name", ITEM2 = "Age", ITEM3 = "Gender", ITEM4 = "Country";
String[] names = {"Jim","Tim","Tom","Jack","James","Jason","Anna","Lucy","Lily","Venus"};
String[] ages = {"21","22","23","23","21","37","34","26","28","29"};
String[] genders = {"Male","Male","Male","Male","Male","Male","Female","Female","Female","Female"};
String[] countries = {"UK","US","US","CN","AU","CA","CA","CA","US","UK"};
for(int i=0;i<10;i++){
Map<String,String> mapItem = new HashMap<String,String>();
mapItem.put(ITEM1, names[i]);
mapItem.put(ITEM2, ages[i]);
mapItem.put(ITEM3, genders[i]);
mapItem.put(ITEM4, countries[i]);
data.add(mapItem);
}
list = (ListView)findViewById(R.id.listView);
list.setClickable(true);
list.setAdapter(new SimpleAdapter(MainActivity.this,data,R.layout.list,
new String[]{ITEM1,ITEM2,ITEM3,ITEM4},new int[]{R.id.listName,R.id.listAge,R.id.listGender,R.id.listCountry}));
list.setOnItemClickListener(new listItemClickListener());
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
list.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener(){
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch(item.getItemId()){
case R.id.menu_delete:
System.out.println("trying to remove a list view item");
mode.finish();
return true;
default:
return false;
}
}
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.activity_main, menu);
return true;
}
public void onDestroyActionMode(ActionMode arg0) {}
public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {return false;}
public void onItemCheckedStateChanged(ActionMode arg0, int arg1,long arg2, boolean arg3) {}
});
list.setOnHoverListener(new View.OnHoverListener() {
public boolean onHover(View arg0, MotionEvent arg1) {
arg0.setBackgroundColor(Color.CYAN);
return false;
}
});
}
class listItemClickListener implements OnItemClickListener{
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
System.out.println("The adapter view ID is====> "+arg0.getId());
System.out.println("The clicked item ID is====> "+arg1.getId());;
System.out.println("The clicked item Pos is====> "+arg2);
System.out.println("The clicked Row is====> "+arg3);
((ListView)arg0).setItemChecked(arg2, true);
Toast.makeText(MainActivity.this, "You selected "+((TextView)arg1.findViewById(R.id.listName)).getText(), Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
package com.XXX.listviewdemo;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入android.annotation.SuppressLint;
导入android.app.Activity;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.view.ActionMode;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.MenuItem;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.Window;
导入android.widget.AbsListView;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.Button;
导入android.widget.CheckBox;
导入android.widget.CompoundButton;
导入android.widget.CompoundButton.OnCheckedChangeListener;
导入android.widget.ListView;
导入android.widget.simpledapter;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展了活动{
私有按钮类=空;
私有ListView列表=空;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.activity_main);
列表数据=新的ArrayList();
字符串ITEM1=“Name”、ITEM2=“Age”、ITEM3=“Gender”、ITEM4=“Country”;
String[]name={“吉姆”、“蒂姆”、“汤姆”、“杰克”、“詹姆斯”、“杰森”、“安娜”、“露西”、“莉莉”、“维纳斯”};
字符串[]年龄={“21”、“22”、“23”、“23”、“21”、“37”、“34”、“26”、“28”、“29”};
字符串[]genders={“男性”、“男性”、“男性”、“男性”、“男性”、“女性”、“女性”、“女性”、“女性”};
字符串[]国家={“英国”、“美国”、“美国”、“中国”、“非盟”、“CA”、“CA”、“CA”、“美国”、“英国”};
对于(int i=0;i
您好,请检查您的onListItemClick并使用适配器获取项目位置,长时间单击下面代码中的事件实现
listView.setOnItemLongClickListener (new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView parent, View view, int position, long id)
{
//do your stuff here
}
});
只使用代码的答案不受欢迎。请解释您的代码以及您发现的问题…嗨,@androidgeek您能指出我的onItemClicked()
方法有什么问题吗?在我删除((ListView)arg0)之后。setItemChecked(arg2,true);
在onItemClick()中
方法,单击列表视图项不会触发CAB显示()。此外,我实现了onitmlongclick()
方法,通过长时间单击列表视图项不会进入其中,只显示CAB。
listView.setOnItemLongClickListener (new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView parent, View view, int position, long id)
{
//do your stuff here
}
});