0

Comme le dit le titre. J'ai codé onClickListener à mon AlertDialog mais je ne sais pas comment y mettre onLongClickListener.Android: Comment coder un AlertDialog avec onClickListener et onLongClickListener

Ceci est mon code:

private void addRecipeMethod() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Title"); 
    adapter = new ArrayAdapter<>(getBaseContext(), android.R.layout.simple_list_item_1, getArrayList("ListOfRecipes")); 
    builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      List<String> list = new ArrayList<>(getArrayList("ListOfRecipes")); 
      getArrayListRecipes(list.get(which)); 
      List<String> listMain = new ArrayList<>(getArrayList("ListMain")); 
      listMain.addAll(getArrayListRecipes(list.get(which))); 
      saveList(listMain, "ListMain"); 

      adapter = new ArrayAdapter<>(getBaseContext(), android.R.layout.simple_list_item_1, getArrayList("ListMain")); 
      listView.setAdapter(adapter); 





      //Toast.makeText(getApplicationContext(), "you have clicked " + list.get(which) , Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    builder.show(); 
} 

PS. vide addRecipeMethod est appelée lorsque menu est cliqué

+0

Copie possible de [Utiliser onClickListener et onLongClickListener dans listview Android 1.6] (http://stackoverflow.com/questions/4621439/use-both-onclicklistener-and-onlongclicklistener-in-listview-android-1-6) –

Répondre

2

Créer AlertDialog avec mise en page personnalisée comme celui-ci

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
    // ...Irrelevant code for customizing the buttons and title 
    LayoutInflater inflater = this.getLayoutInflater(); 
    View dialogView = inflater.inflate(R.layout.alert_label_editor, null); 
    dialogBuilder.setView(dialogView); 


    Button button = (Button)dialogBuilder.findViewById(R.id.btnName); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     //Commond here...... 

     } 
    }); 

    button.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }); 

    AlertDialog alertDialog = dialogBuilder.create(); 
    alertDialog.show(); 

Ajouter un bouton dans alert_label_editor xml et ajoutez setOnLongClickListener pour ce bouton

Button button = (Button)dialogBuilder.findViewById(R.id.btnName); 

    button.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }); 
+0

Cette approche devrait fonctionner. Une autre façon que je préfère est d'utiliser un 'DialogFragment' et de définir' OnLongClickListener' dans une mise en page personnalisée et gonflée lorsque la vue fragmentée est créée. – pawegio

+0

Hmmm avec le bouton il semble logique. Mais dans mon cas, j'ai ListView dans mon AlertDialog et je veux onClickListener et onLongClickListener sur ce ListView – TheD3luxed

+0

vous pouvez ajouter listview dans la mise en page personnalisée –

0

Toute idée pourquoi je peux n'utilise pas la méthode findViewById?

error image

Ce que je dois faire avec mon constructeur pour obtenir ce travail?

+0

lorsque je supprime "builder." Mon application plante – TheD3luxed

+0

utiliser dialogView.finfViewById (...) au lieu du constructeur –

+0

Hmmm maintenant ma méthode onClickListener plante mon application ... Ahhhhh ma mauvaise. onItemClickListene r au lieu de onClickListener. Maintenant, son fonctionnement – TheD3luxed