2016-04-21 12 views
-1

enter image description hereHinzufügen von Daten in Listview Runtime Benutzerdefinierte Adapter mit

PROBLEM: wenn ich klicken bin auf Schaltfläche Hinzufügen dann alle Daten sind klar und nur ein Element ist zeigt .... Ich möchte auch alte Elemente anzeigen als neu aufgenommener Artikel ...

dies ist mein Code .....

MODELL Klasse

public class GroupModel { 
    ArrayList<String> G_member=new ArrayList<String>(); 
    ArrayList<String> G_name = new ArrayList<String>(); 


    public ArrayList<String> getG_member() { 
     return G_member; 
    } 

    public void setG_member(ArrayList<String> g_member) { 
     G_member = g_member; 
    } 
    public void addToGmember(String gname){ 
     this.G_member.add(gname); 
    } 

    public ArrayList<String> getG_name() { 
     return G_name; 
    } 

    public void setG_name(ArrayList<String> g_name) { 
     G_name = g_name; 
    } 
    public void addToGname(String name){ 
     this.G_name.add(name); 
    } 
} 

zentral-

public class MainActivity extends ActionBarActivity { 

    Context context=this; 
    private ListView lv; 
    ImageView plus_img;// plus button to add GROUP Runtime. 
    GroupModel model = new GroupModel(); 
    GroupAdapter adapter; 
    ListView myListView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     lv = (ListView) findViewById(R.id.group__listview); 
     myListView = lv; 
     //plus image 
     plus_img = (ImageView) findViewById(R.id.add_img); 
     plus_img.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       model.addToGname("jignesh"); 
       model.addToGmember("8"); 
       ArrayList<GroupModel> l = new ArrayList<GroupModel>(); 
       l.add(model); 
      //  adapter.setListData(getListData()); 
       myListView.setAdapter(new GroupAdapter(context, l)); 
      // adapter.notifyDataSetChanged(); 
      } 
     }); 


     adapter= new GroupAdapter(context,getListData()); 
     lv.setAdapter(adapter); 

} 

    private ArrayList getListData() { 
     ArrayList list = new ArrayList(); 
     int untilloop; 

     if(model.getG_member().size()>10) 
     { 
      untilloop = model.getG_member().size(); 
      for (int i=0;i<untilloop;i++) 
      { 
       model.getG_member(); 
       model.getG_name(); 
       list.add(model); 
      } 
     } 
     else{ 
      untilloop=10; 
      for(int i = 0; i <untilloop; i++){ 
       model.getG_name().add("raj "+i); 
       model.getG_member().add(""+i); 
       list.add(model); 
      } 
     } 

     return list; 
    } 
} 

ADAPTER Klasse

public class GroupAdapter extends BaseAdapter { 
    ArrayList<GroupModel> glist; 
    Context context; 
    private LayoutInflater layoutInflater; 

    public GroupAdapter(Context mainActivity, ArrayList<GroupModel> glist) { 
     context = mainActivity; 
     this.glist=glist; 
     layoutInflater = LayoutInflater.from(context); 
    } 
    public void setListData(ArrayList<GroupModel> data){ 
     glist = data; 
    } 

    @Override 
    public int getCount() { 
     return glist.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return glist.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if(convertView==null){ 
     // LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      convertView = layoutInflater.inflate(R.layout.row_list_data,null); 
      holder= new ViewHolder(); 
      holder.g_number=(TextView)convertView.findViewById(R.id.txt_g_number); 
      holder.g_name=(TextView)convertView.findViewById(R.id.txt_g_name); 
      holder.nxt_aerrow=(ImageView)convertView.findViewById(R.id.img_nxt); 
      convertView.setTag(holder); 
     }else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.g_number.setText(glist.get(position).getG_member().get(position).toString()); 
     holder.g_name.setText(glist.get(position).getG_name().get(position).toString()); 

     holder.nxt_aerrow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(context,"image click",Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     return convertView; 
    } 
    static class ViewHolder { 
     TextView g_number,g_name; 
     ImageView nxt_aerrow; 
    } 
} 
+0

Mögliche Duplikat [Listview mit einem benutzerdefinierten Adapter, Hinzufügen von Elementen eins nach dem anderen ] (http://stackoverflow.com/questions/9416215/listview-with-a-custom-adapter-addin g-elements-one-by-one) –

+0

In OnClick erstellen Sie ein Array-Objekt, und wenn Sie es an Ihren Adapter übergeben, wird jedes Mal nur eine Zeile erstellt. Erstellen Sie diese Array-Liste auf globaler Ebene und fügen Sie Ihr Gruppenmitglied hinzu. wird hoffentlich Ihr Problem lösen –

+0

Vielen Dank für die Antwort ,,,, Ich möchte eine Zeile hinzufügen, wenn OnClick ... –

Antwort

1

versuchen dies die Methode in Adapter hinzufügen:

public void addItem(GroupModel groupModel){ 
    yourList.add(groupModel); 
    notifyDataSetChanged(); 
} 

And On Click-Methode Dazu

plus_img.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       model.addToGname("jignesh"); 
       model.addToGmember("8"); 

       adapter.addItem(model); 
      } 
     }); 
+0

Yup .. seine Arbeit ... jetzt möchte ich einen bestimmten Artikel löschen, wenn lange gedrückt ... so wie kann ich erreichen? –

+0

@RjzSatvara Eine Frage pro Beitrag, bitte. Ihre gepostete Frage wurde beantwortet. Wenn Sie einen anderen haben, schreiben Sie eine neue Frage. Besser noch, suche zuerst. Diese Frage wurde hier schon einmal beantwortet. –

0

Sie haben immer ein Element in Ihrem ListView, weil jedes Mal, wenn Sie auf add button klicken Sie neu erstellen ArrayList Sie ein Element fügen Sie dann zu Ihrem ArrayList => Ihre ArrayList immer ein Artikel => Ihre ListView haben immer einen Artikel

So einfach bewegen ArrayList<GroupModel> l = new ArrayList<GroupModel>(); nach außerhalb plus_img.setOnClickListener(new View.OnClickListener()

... 
ArrayList<GroupModel> l = new ArrayList<GroupModel>(); 
... 
plus_img.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ... 
      } 
}); 
+0

danke für die Antwort .. lass mich versuchen –

+0

noch Ausgabe nicht gelöst .... das gleiche Problem –

+0

innerhalb 'SetOnClickListener', können Sie eine Logcat für den Ausdruck der' ArrayList Größe 'schreiben. und dann sagen Sie mir, dass die Array-Größe korrekt erhöht wird, wenn Sie auf Hinzufügen drücken oder nicht –

0

Versuchen Sie den folgenden Code in Ihrer Aktivität.

public class MainActivity extends ActionBarActivity { 

Context context=this; 
private ListView lv; 
ImageView plus_img;// plus button to add GROUP Runtime. 
GroupModel model = new GroupModel(); 
GroupAdapter adapter; 
ListView myListView; 
ArrayList<GroupModel> l = new ArrayList<GroupModel>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lv = (ListView) findViewById(R.id.group__listview); 
    myListView = lv; 
    //plus image 
    plus_img = (ImageView) findViewById(R.id.add_img); 
    plus_img.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      model.addToGname("jignesh"); 
      model.addToGmember("8"); 
      l.add(model); 
     //  adapter.setListData(getListData()); 
      myListView.setAdapter(new GroupAdapter(context, l)); 
     // adapter.notifyDataSetChanged(); 
     } 
    }); 


    adapter= new GroupAdapter(context,getListData()); 
    lv.setAdapter(adapter); 

} 

private ArrayList getListData() { 
    ArrayList list = new ArrayList(); 
    int untilloop; 

    if(model.getG_member().size()>10) 
    { 
     untilloop = model.getG_member().size(); 
     for (int i=0;i<untilloop;i++) 
     { 
      model.getG_member(); 
      model.getG_name(); 
      list.add(model); 
     } 
    } 
    else{ 
     untilloop=10; 
     for(int i = 0; i <untilloop; i++){ 
      model.getG_name().add("raj "+i); 
      model.getG_member().add(""+i); 
      list.add(model); 
     } 
    } 

    return list; 
} 
} 
+0

keine Änderung ....immer noch dasselbe Problem –

0

adapter = new GroupAdapter (Kontext, getListData()); lv.setAdapter (Adapter);

wenn u diese Zeile beachten Sie setzen unabhängig von getListData() zurückkehrt ... erklären so eine neue globale Liste und die später folgenden Aktionen

globalList.addAll(getListData()); 
adapter= new GroupAdapter(context,globalList); 

Jetzt können Sie sowohl alte als auch erhalten, wenn neue Daten ... Sie eine neue Liste pflegen, wo in Sie alle Daten haben .... und manipulieren mit, dass „globalList“

Danke