2013-01-23 23 views
1

我創建了一個上下文菜單。當我長按列表項時,會出現上下文菜單。到目前爲止這麼好...Android:在Dialog上使用ContextMenu時發出的問題

但是當我點擊一個上下文時,沒有任何反應。有誰知道這個問題? 這裏有什麼問題?

按鈕與列表視圖打開對話框:

 Button cmd_fav = (Button) findViewById(R.id.cmd_main_fav); 
    cmd_fav.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      List<String> valueList = new ArrayList<String>(); 

      db = SQLiteDatabase.openDatabase("/data/data/spicysoftware.abugrundwissen/databases/questions", null, 
        SQLiteDatabase.OPEN_READWRITE); 
      Cursor c_ = db.rawQuery("SELECT question, _id, answer FROM tbl_questions"+ 
        " where favourite = 1", null); 


      if (c_ != null) { 
       if (c_.moveToFirst()) { 
        do { 
         String str_question = c_.getString(c_.getColumnIndex("question"));    
         valueList.add(str_question);       
        } while (c_.moveToNext()); 
       } 

       // custom dialog 
       dialog = new Dialog(MainSite.this); 
       dialog.setContentView(R.layout.dialog_list); 
       dialog.setTitle("Favoriten:"); 
       adapter = new ArrayAdapter<String>(MainSite.this, android.R.layout.simple_list_item_1, valueList); 
       final ListView lv = (ListView)dialog.findViewById(R.id.list_search); 

       lv.setAdapter(adapter); 

       registerForContextMenu(lv); 

       lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { 


        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
         menu.add(Menu.NONE, CONTEXT_MENU_DELETE_ITEM, Menu.NONE, "Favorit entfernen"); 
         menu.add(Menu.NONE, CONTEXT_MENU_FINISH_ITEM, Menu.NONE, "Frage abschliessen!"); 
        } 
       }); 



       lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
       lv.setOnItemClickListener(new OnItemClickListener() { 
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { 
         String item = (String) lv.getItemAtPosition(position).toString(); 

         Cursor c_2 = db.rawQuery("SELECT answer FROM tbl_questions"+ 
           " where question = '"+item+"'", null); 

         if (c_2 != null) { 
          if (c_2.moveToFirst()) { 
            answer = c_2.getString(c_2.getColumnIndex("answer")); 
           } 
          } 

         // custom dialog 
         final Dialog dialog = new Dialog(MainSite.this); 
         dialog.setContentView(R.layout.dialog_answer); 
         dialog.setTitle("Antwort:"); 

         // set the custom dialog components - text, image and button 
         TextView text = (TextView) dialog.findViewById(R.id.txt_answer); 
         //text.setText(answer); 
         text.setText(Html.fromHtml(answer), TextView.BufferType.SPANNABLE); 

         Button dialogButton = (Button) dialog.findViewById(R.id.cmd_close_dialog); 
         // if button is clicked, close the custom dialog 
         dialogButton.setOnClickListener(new OnClickListener() { 

          public void onClick(View v) { 
           dialog.dismiss(); 
          } 
         }); 

         dialog.show(); 

         } 

       }); 



       Button dialogButton = (Button) dialog.findViewById(R.id.cmd_close_dialog2); 
       // if button is clicked, close the custom dialog 
       dialogButton.setOnClickListener(new OnClickListener() { 

        public void onClick(View v) { 
         dialog.dismiss(); 
        } 
       }); 

       dialog.show(); 


      } 




     } 


    }); 

OnContextItemSelected:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    Log.v("tst", "lol"); 
switch (item.getItemId()) { 

     case CONTEXT_MENU_DELETE_ITEM: 
      Log.v("DELETED", "TRUE"); 
      return true; 

     case CONTEXT_MENU_FINISH_ITEM: 
     Log.v("FINISHED", "TRUE"); 
      return true; 

    } 
Log.v("FINISHED", "LOL"); 
return false; 


    } 

問候 MSeiz5

+0

甚至Log.v( 「TST」, 「笑」);不打印? –

+0

Nop ...它不打印 –

+0

也許這是一個更好的方式來重寫OnCreateContextmenu?我只能看到,你將ListView設置爲一個監聽器,但是這個監聽器叫什麼名字? – Opiatefuchs

回答

0

我發現這裏的解決方案Android: ContextMenu and ItemSelected in Context Menu

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
      super.onCreateContextMenu(menu, v, menuInfo); 
      //MenuInflater inflater = getMenuInflater(); 
      //inflater.inflate(R.menu.context_menu, menu); 

      MenuItem delete = menu.add("delete"); 
      MenuItem add = menu.add("add"); 
      add.setIcon(android.R.drawable.ic_menu_upload); //adding icons 
      delete.setOnMenuItemClickListener(new OnMenuItemClickListener() { 
        public boolean onMenuItemClick(MenuItem item) { 
         Log.d("ContextCheck","EDIT!"); 
         Toast.makeText(Pr.this, "Edit!", Toast.LENGTH_SHORT).show(); 
          return true; 
        } 
      }); 
      add.setOnMenuItemClickListener(new OnMenuItemClickListener() { 
       public boolean onMenuItemClick(MenuItem item) { 
        Log.d("ContextCheck","EDIT!"); 
        Toast.makeText(Pr.this, "Edit!", Toast.LENGTH_SHORT).show(); 
        return true; 
       } 
     }); 
     } 

正在工作!

0

如果MenuInflater使用的,更通用的代碼:

MenuInflater inflater = getMenuInflater();  
     inflater.inflate(R.menu.ruleitem_menu, menu); 
     if (menuInfo instanceof AdapterView.AdapterContextMenuInfo){ 
      AdapterView.AdapterContextMenuInfo adptrCmi = (AdapterContextMenuInfo) menuInfo; 
      String lsItem = currentRuleListView.getItemAtPosition(adptrCmi.position).toString(); 
      menu.setHeaderTitle(lsItem); 
     } 

     //if Activity.onContextItemSelected not triggered, try the following lines 
     for (int i=0; i< menu.size();i++){ 
      menu.getItem(i).setOnMenuItemClickListener(new OnMenuItemClickListener(){ 

       @Override 
       public boolean onMenuItemClick(MenuItem item) { 
        return onContextItemSelected(item); 
       } 

      }); 
     } 
相關問題