2012-06-06 160 views
1

它是我第一次在这里,我正在寻找这个问题的答案为2天,没有任何工作。 这里是,我想显示MenuOptions(编辑,删除),当用户持有选定的项目,长按。 我的代码:当我选择的菜单按钮onLongClick显示菜单选项

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”活动成为LongPress动作,我不知道它是否清晰。

回答

2

你想要的是registerForContextMenu,那就是注册你的ListView而不是Activity,这样长按它就会创建一个新菜单并显示给用户。见

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

+0

我要去尝试使用registerForContextMenu,也许它的工作原理 –

+0

@Danilo佩雷拉德卢卡:你不会让它以任何其他方式工作,你需要一个'ContextMenu'对象,你不能实例之一那些你自己。只有'Activity'(它的内部)可以实例化'Menu','SubMenu','ContextMenu'等......并且对于'ContextMenu',Activity'将实例化一个并且仅在你'registerForContextMenu'。 –

+0

但知道我不知道使这个选项菜单的工作,它似乎,但没有处理任何东西... –