2012-07-05 1 views
0

Fondamentalement, j'essaie d'ajouter un OnClickListener à un bouton dans une boîte de dialogue, mais en ajoutant simplement l'écouteur, l'application devient instable et se bloque, et quand j'essaie et l'attraper, le message retourné est nul. Merci d'avoir jeté un coup d'oeil à mon problème.Android - Erreur lors de l'ajout d'un OnClickListener à un bouton dans une boîte de dialogue

De plus, si cela vous aide, cela est déclenché quand vous appuyez sur un bouton de menu.

Création du dialogue:

try { 
     final Dialog dialog = new Dialog(List.this); 
     dialog.setContentView(R.layout.adddialog); 
     dialog.setTitle("Add to the list"); 
     dialog.setCancelable(true); 

     final EditText et = (EditText) findViewById(R.id.itemAddDialog); 
     Button ok = (Button) findViewById(R.id.okAddDialog); 
     Button cancel = (Button) findViewById(R.id.cancelAddDialog); 

     ok.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View arg0) { 
       //Contents of this function don't matter, It freezes simply by being created 
      } 
     }); 

     dialog.show(); 
     } 
catch (Exception e) { 
    Toast.makeText(List.this, e.getMessage(), Toast.LENGTH_LONG).show(); 
} 

fichier XML (Légèrement coupé):

<LinearLayout 
    android:id="@+id/btnpaneAddDialog" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" > 

    <Button 
     android:id="@+id/okAddDialog" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add it" /> 

    <Button 
     android:id="@+id/cancelAddDialog" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Cancel" /> 


</LinearLayout> 

Répondre

1

Change:

Button ok = (Button) findViewById(R.id.okAddDialog); 

à

Button ok = (Button) dialog.findViewById(R.id.okAddDialog); 
+0

Wow, merci! J'essayais d'envelopper ma tête autour de celui-ci toute la journée! Merci! –

+0

assurez-vous de marquer sa réponse comme la bonne, et donnez-lui un upvote pour la postérité;) – MattC

1

Il semble que vous appelez la méthode lourde net.startRunning(); à partir du thread principal (à partir de la méthode OnClick()). La bonne façon de le faire est d'exécuter cette méthode sur un nouveau thread, par exemple:

@Override 
public void onClick(View arg0) 
{ 
    String toSend = ""; 
    for(String s : items) 
    { 
     if(s != null && !s.equals("")) toSend += s + ":"; 
    } 

    new AsyncTask<Void, Void, Void>() 
    { 
     @Override 
     protected Void doInBackground(Void... params) 
     { 
      net.startRunning(); 
      net.sendMessage("setlist|" + uname + "#" + (toSend += et.getText().toString())); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) 
     { 
      dialog.dismiss(); 
     } 
    }.execute(); 
} 
Questions connexes