2016-03-24 11 views
0

Was ich gerne hätte, ist, dass wenn der + Button neben einem Namen isClicked ist, der Kontakt zu einer Liste AnruflisteDemandAccepted hinzugefügt wird.Wie bekomme ich eine Schaltfläche in einer ListView, die in einen alertDialog eingebettet ist?

Here is what I have now

Zuerst habe ich ein einfaches Layout mit einem Listview, dann ich Elemente in die Listview hinzugefügt, um eine Arrayadapter (ein Image mit einem Textview) verwendet wird.

Hier ist der Code in der Aktivität, der startet, wenn auf eine Schaltfläche geklickt wird.

public void displayContact() { 
    listeDemandAccepted = new ArrayList<Contact>(); 
    if (listeDemand.size() != 0) { 

     final AlertDialog.Builder builderSingle = new AlertDialog.Builder(ContactListActivity.this); 
     final View v1 = (LinearLayout)getLayoutInflater().inflate(R.layout.liste_add_accepted_view, null); 
     final ContactRequestAdapter arrayRequestAdapter = new ContactRequestAdapter(ContactListActivity.this, listeDemand); 

     builderSingle.setIcon(R.drawable.user_groupe); 
     builderSingle.setTitle("Updating list"); 
     builderSingle.setCancelable(true); 
     builderSingle.setView(v1); 
     TextView textView = (TextView)v1.findViewById(R.id.name_liste); 
     textView.setText("New demand by :"); 
     ListView listView = (ListView)v1.findViewById(R.id.liste_demand_add); 
     listView.setAdapter(arrayRequestAdapter); 

     new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       Contact contact = arrayRequestAdapter.getItem(which); 
       listeDemandAccepted.add(contact); 
      } 

     }; 

     builderSingle.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       Toast.makeText(builderSingle.getContext(), "Updating", Toast.LENGTH_LONG).show(); 
       ArrayList<Contact> listeAll = listeAccepted; 
       listeAll.addAll(listeDemandAccepted); 
       listeContact.addAll(listeAll); 
      } 
     }); 
     builderSingle.show(); 
    } 
} 

Ich habe mehrere Methoden ausprobiert, aber bisher nicht gelungen. Und nichts geschieht nach der Anweisung: listeDemandAccepted.add(contact);

Hier ist der contactRequestAdapter Code ist (dass ich vergessen hatte):

public class ContactRequestAdapter extends ArrayAdapter<Contact> { 

public ContactRequestAdapter(Context ctxt, ArrayList<Contact> contacts) { 
    super(ctxt,0,contacts); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
    Contact contact = getItem(position); 

    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.liste_demand_adapter, parent, false); 
    } 
    // Lookup view for data population 
    TextView checkBox = (TextView) convertView.findViewById(R.id.accept_user_checkbox); 

    // Populate the data into the template view using the data object 
    checkBox.setText(contact.getName()); 

    // Return the completed view to render on screen 
    return convertView; 
} 

} `

Haben Sie eine Idee, wie mir zu helfen?

Danke,

Antwort

0

Sie können versuchen, ein onClickListener zum listview Artikel zu definieren (in Ihrem Fall ist es die Plus-Taste) in der Lage sein zu erkennen und setzen die „listeDemandAccepted.add(contact);“ in diesem Verfahren anstelle von alogInterface.OnClickListener.

+0

Das habe ich ausprobiert, wusste aber nicht, wie man den Plus-Button erreicht! – Hinko

+0

@Hinko Android-Design-Prinzip entmutigt UI, die eine wiederholte Aktion enthalten, wie die, die Sie definiert haben - die Liste muss nicht die + Schaltfläche in jedem Listenelement haben - es könnte nur eine Liste sein und auf einen davon könnte es hinzufügen Ihr Geschäftsmodell - das ist nur ein Teil meines Vorschlags. – takrishna

0

Ihr Problem zu beheben, ich glaube, dass Sie einen onItemClickListener zu Ihrem Listview hinzuzufügen haben, und in Ihrem Kontakt des Zuhörers hinzufügen erklärt Arraylist und am Ende nicht vergessen zu nennen

arrayRequestAdaper.notifyDataSetChanged();