android setOnclickListener阻止onCreateContextMenu

时间:2015-10-26 18:39:01

标签: android listview android-adapter listactivity android-contextmenu

我有一个简单的ListView和上下文菜单。 当我动态添加项目时,我还想在适配器中添加setOnClickListener()。

我想要的是:短击应该触发setOnclickListener并长按fireCreateContextMenu。

但是当我向项目添加点击监听器时,上下文菜单不再起作用了。

使用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);
    }
}
}

适配器:

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());

}
}

所以,如果我长按“日期”,那么上下文菜单就可以了。如果在“名称”上,那么它不起作用。 我做错了什么?

0 个答案:

没有答案