android - onLongClick 显示菜单选项

标签 android contextmenu menuitem onlongclicklistener

这是我第一次来这里,我寻找这个问题的答案已经两天了,但没有任何效果。 这是,我想在用户按住所选项目并长按时显示菜单选项(编辑、删除)。 我的代码:

public class ProjetoProTelefoneActivity extends ListActivity {
public final static String ID_EXTRA = "br.com.DaniloDeLuca.ProjetoProTelefone._ID";
Cursor modelo = null;
RestaurantAdapter adapter = null;
RestauranteHelper helper=null;
SharedPreferences prefs=null;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    helper = new RestauranteHelper(this);
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    initList();
    prefs.registerOnSharedPreferenceChangeListener(prefListener);
}

public void onDestroy(){
    super.onDestroy();

    helper.close();
}
public void onListItemClick(ListView list, View view,
        int position,long id){
    Intent i=new Intent(ProjetoProTelefoneActivity.this, DetailForm.class);
    i.putExtra(ID_EXTRA, String.valueOf(id));
    startActivity(i);
}

public void onListItemLongClic( View view,int position,Menu menu){
    new MenuInflater(this).inflate(R.menu.option,menu);
    super.onCreateOptionsMenu(menu);

}

//hook into menu button for activity 
public boolean onCreateOptionsMenu(Menu menu){
    new MenuInflater(this).inflate(R.menu.option,menu);
    return(super.onCreateOptionsMenu(menu));
}
/// when menu button option selected 
public boolean onOptionsItemSelected(MenuItem item){
    if(item.getItemId()==R.id.add){
        startActivity(new Intent(ProjetoProTelefoneActivity.this, DetailForm.class));
        return(true);
    }
    else if(item.getItemId()==R.id.prefs){

        startActivity(new Intent(this, EditPreferences.class));
        return(true);
    }
    return(super.onOptionsItemSelected(item));
}
private SharedPreferences.OnSharedPreferenceChangeListener prefListener=
        new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                    String key) {
                if(key.equals("sort_order")){
                    initList();
                }

            }
};
private void initList(){
    if(modelo!=null){
        stopManagingCursor(modelo);
        modelo.close();
    }
    modelo =helper.getAll(prefs.getString("sort_order","nome DESC"));
    startManagingCursor(modelo);

    adapter = new RestaurantAdapter(modelo);       
    setListAdapter(adapter); 

}

class RestaurantAdapter extends CursorAdapter {
    RestaurantAdapter(Cursor c) {
      super(ProjetoProTelefoneActivity.this, c);
    }

    public void bindView(View row, Context ctxt,
                         Cursor c) {
      RestaurantHolder holder=(RestaurantHolder)row.getTag();

      holder.populateFrom(c, helper);
    }


    public View newView(Context ctxt, Cursor c,
                         ViewGroup parent) {
      LayoutInflater inflater=getLayoutInflater();
      View row=inflater.inflate(R.layout.row, parent, false);
      RestaurantHolder holder=new RestaurantHolder(row);

      row.setTag(holder);

      return(row);
    }
  }

  static class RestaurantHolder {
    private TextView name=null;
    private TextView address=null;
    private ImageView icon=null;

    RestaurantHolder(View row) {
      name=(TextView)row.findViewById(R.id.title);
      address=(TextView)row.findViewById(R.id.address);
      icon=(ImageView)row.findViewById(R.id.icon);
    }

    void populateFrom(Cursor r,RestauranteHelper helper) {
      name.setText(helper.getNome(r));
      address.setText(helper.getEnd(r));


      if (helper.getTipo(r).equals("casa")) {
        icon.setImageResource(R.drawable.casa_icon);
      }
      else if (helper.getTipo(r).equals("apartamento")) {
        icon.setImageResource(R.drawable.apartamento_icon);
      }
      else {
        icon.setImageResource(R.drawable.comercio_ico);
      }
    }
  }

}

只有当我选择菜单按钮时,这才有效。但我想让“MenuButton” Activity 成为长按 Action ,我不知道是否清楚。

最佳答案

您想要的是registerForContextMenu,即针对Activity注册您的ListView,以便长按它时会出现一个新菜单将被创建并向用户显示。参见

http://developer.android.com/reference/android/app/Activity.html#registerForContextMenu%28android.view.View%29

关于android - onLongClick 显示菜单选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907127/

相关文章:

macos - 使用 AppleScript 和 Automator 在 Mac 上使用键盘显示上下文菜单

wordpress - 获取当前菜单项的菜单名称或位置

android - 如何在 BaseAdapter 中添加 DialogFragment?

android - 如何在 Kotlin Android 的 DatePicker 中禁用 future 日期

android - 组织包含 XML 布局文件

c# - 构建 Windows 资源管理器扩展

javascript - Electron 菜单动态更改项目标签

android - 将对象序列化为android中的文件

安卓和菜单

android-support-library - 安卓导航 View : not show full item and not truncate