2012-06-06 156 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

但知道我不知道使這個選項菜單的工作,它似乎,但沒有處理任何東西... –