android setOnclickListener块onCreateContextMenu
我有一个带有上下文菜单的简单列表视图。 当我动态地向其中添加项时,我还希望在适配器中添加setOnClickListener() 我想要的是:短按应该触发setOnclickListener,长按应该触发CreateContextMenu 但当我将click listener添加到项目中时,上下文菜单就不再起作用了 带有ListView的MainActivity:android setOnclickListener块onCreateContextMenu,android,listview,android-adapter,listactivity,android-contextmenu,Android,Listview,Android Adapter,Listactivity,Android Contextmenu,我有一个带有上下文菜单的简单列表视图。 当我动态地向其中添加项时,我还希望在适配器中添加setOnClickListener() 我想要的是:短按应该触发setOnclickListener,长按应该触发CreateContextMenu 但当我将click listener添加到项目中时,上下文菜单就不再起作用了 带有ListView的MainActivity: public class MainActivity extends ListActivity { public static fi
public class MainActivity extends ListActivity {
public static final String NOTES_ARRAY = "notesArray";
public static final String NOTE_ADAPTER = "noteAdapter";
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
final ArrayList<Note> notes = new ArrayList<>();
final NoteAdapter adp = new NoteAdapter(this, notes);
setListAdapter(adp);
registerForContextMenu(getListView());
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
Log.i("clicked something", "really clicked");
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_note, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
Log.i("id", String.valueOf(info.position));
switch (item.getItemId()) {
case R.id.item_delete:
Log.i("wow", "clicked delete");
return true;
case R.id.item_reset:
Log.i("wow", "clicked reset");
return true;
default:
return super.onContextItemSelected(item);
}
}
}
public类MainActivity扩展了ListActivity{
公共静态最终字符串注释\u ARRAY=“notesArray”;
公共静态最终字符串NOTE_ADAPTER=“noteAdapter”;
@凌驾
创建(捆绑冰柱)时的公共空间{
超级冰柱;
setContentView(R.layout.activity_main);
最终ArrayList注释=新ArrayList();
最终NoteAdapter adp=新NoteAdapter(本,notes);
setListAdapter(adp);
registerForContextMenu(getListView());
}
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenu.ContextMenuInfo菜单信息){
super.onCreateContextMenu(menu,v,menuInfo);
我(“点击某物”,“真的点击”);
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。菜单注释,菜单);
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)项。getMenuInfo();
Log.i(“id”,String.valueOf(info.position));
开关(item.getItemId()){
案例R.id.项目\删除:
Log.i(“哇”,“点击删除”);
返回true;
案例R.id.item_重置:
Log.i(“哇”,“点击重置”);
返回true;
违约:
返回super.onContextItemSelected(项目);
}
}
}
适配器:
class NoteAdapter extends BaseAdapter implements Parcelable {
private Context context;
private ArrayList<Note> notes;
public NoteAdapter(Context context, ArrayList<Note> notes) {
this.context = context;
this.notes = notes;
}
@Override
public int getCount() {
return notes.size();
}
@Override
public Object getItem(int position) {
return notes.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = (View) inflater.inflate(R.layout.event_list_item, null);
}
TextView name = (TextView) convertView.findViewById(R.id.whatUserDid);
TextView date = (TextView) convertView.findViewById(R.id.whenUserDid);
name.setText(notes.get(position).getName());
date.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.i("date", "clicked");
}
});
return convertView;
}
/* Code below makes class Parcelable */
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(context);
dest.writeList(notes);
}
public static Creator<NoteAdapter> CREATOR = new Creator<NoteAdapter>() {
@Override
public NoteAdapter createFromParcel(Parcel source) {
return new NoteAdapter(source);
}
@Override
public NoteAdapter[] newArray(int size) {
return new NoteAdapter[size];
}
};
private NoteAdapter(Parcel parcel) {
this.context = (Context).readValue(Context.class.getClassLoader());
this.notes = (ArrayList).readValue(ArrayList.class.getClassLoader());
}
}
class NoteAdapter扩展BaseAdapter实现可包裹{
私人语境;
私人数组列表注释;
公共NoteAdapter(上下文上下文、ArrayList注释){
this.context=上下文;
this.notes=注释;
}
@凌驾
public int getCount(){
returnnotes.size();
}
@凌驾
公共对象getItem(int位置){
返回注释。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
convertView=(视图)充气器。充气(R.layout.event\u list\u项,空);
}
TextView name=(TextView)convertView.findViewById(R.id.whatUserId);
TextView日期=(TextView)convertView.findViewById(R.id.whenUserId);
name.setText(notes.get(position.getName());
date.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
Log.i(“日期”,“点击”);
}
});
返回视图;
}
/*下面的代码使类可以打包*/
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
dest.writeValue(上下文);
目的书面清单(附注);
}
公共静态创建者=新创建者(){
@凌驾
公共NoteAdapter createFromParcel(地块源){
返回新的NoteAdapter(源);
}
@凌驾
公共NoteAdapter[]新数组(整数大小){
返回新的NoteAdapter[大小];
}
};
专用记事本适配器(包裹){
this.context=(context.readValue(context.class.getClassLoader());
this.notes=(ArrayList.readValue(ArrayList.class.getClassLoader());
}
}
所以,如果我长时间点击“日期”,那么上下文菜单就起作用了。如果在“name”上,则它不起作用。
我做错了什么