Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android setOnclickListener块onCreateContextMenu_Android_Listview_Android Adapter_Listactivity_Android Contextmenu - Fatal编程技术网

android setOnclickListener块onCreateContextMenu

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

我有一个带有上下文菜单的简单列表视图。 当我动态地向其中添加项时,我还希望在适配器中添加setOnClickListener()

我想要的是:短按应该触发setOnclickListener,长按应该触发CreateContextMenu

但当我将click listener添加到项目中时,上下文菜单就不再起作用了

带有ListView的MainActivity:

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”上,则它不起作用。 我做错了什么