2016-07-28 31 views
0

Können Sie mir helfen, ich lerne! ;-)Wie kann ich Text innerhalb einer ListView ändern, mit einem Adapter

Ich habe zwei Knöpfe "+" und "-" und ich möchte, dass sie den Betrag um eins nach oben oder nach unten erhöhen oder verringern. Wie stelle ich sicher, dass es nur Auswirkungen auf die rechte Textansicht mit einem Adapter hat.
Jetzt wirken alle Tasten nur auf die erste. Ich weiß, dass ich die Position/ID des Arrays bekommen muss. Aber ich weiß nicht wie.

btw
Merk = Marke
Aantal = Betrag

public class ListViewDemo2 extends Activity { 

private ArrayList<String> data = new ArrayList<String>(); 
int aantal = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list_view_demo2); 

    ListView lv = (ListView) findViewById(R.id.bestel_lijst); 
    lv.setAdapter(new MyListAdapter(this, R.layout.list_item, data)); 
    generateListContent(); 
} 

private void generateListContent(){ 
    for (int i =0; i < 55; i++){ 
     data.add("this is row number: " + i); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu (Menu menu){ 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_settings){ 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private class MyListAdapter extends ArrayAdapter<String>{ 
    private int layout; 
    public MyListAdapter(Context context, int resource, List<String> objects) { 
     super(context, resource, objects); 
     layout = resource; 
    } 



    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder mainViewholder = null; 
     if(convertView == null){ 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = inflater.inflate(layout, parent, false); 
      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.Merk = (TextView) convertView.findViewById(R.id.Merk); 
      viewHolder.Aantal = (TextView) convertView.findViewById(R.id.Aantal); 
      viewHolder.btnup = (Button) convertView.findViewById(R.id.Bup); 
      viewHolder.btndown = (Button) convertView.findViewById(R.id.Bdown); 
      viewHolder.btndown.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v){ 
       aantal = aantal-1; 
        displayAantal(aantal); 
       } 
      }); 
      viewHolder.btnup.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v){ 
        aantal = aantal+1; 
        displayAantal(aantal); 
       } 
      }); 
      convertView.setTag(viewHolder); 
     } 
     else { 
      mainViewholder = (ViewHolder)convertView.getTag(); 
      mainViewholder.Merk.setText(getItem(position)); 
     } 
     return convertView; 
    } 
} 

public class ViewHolder { 

    TextView Merk; 
    TextView Aantal; 
    Button btnup; 
    Button btndown; 
} 

public void displayAantal(int aantal) { 
    TextView aantalView = (TextView) findViewById(R.id.Aantal); 
    aantalView.setText(String.valueOf(aantal)); 
} 

}

Antwort

0

Ihr Problem in Ihrer displayAantal(int) Methode zu sein scheint, insbesondere in dieser Zeile:

TextView aantalView = (TextView) findViewById(R.id.Aantal); 

Sie müssen dieses Feld hier nicht erneut initialisieren, da es bereits initia ist lized innen getView():

viewHolder.Aantal = (TextView) convertView.findViewById(R.id.Aantal); 
0
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder mainViewholder = null; 
    if(convertView == null){ 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(layout, parent, false); 
     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.Merk = (TextView) convertView.findViewById(R.id.Merk); 
     viewHolder.Aantal = (TextView) convertView.findViewById(R.id.Aantal); 
     viewHolder.btnup = (Button) convertView.findViewById(R.id.Bup); 
     viewHolder.btndown = (Button) convertView.findViewById(R.id.Bdown); 
     convertView.setTag(viewHolder); 
    } 
    else { 
     mainViewholder = (ViewHolder)convertView.getTag(); 
    } 
    String str = getItem(position); 
    mainViewholder.Merk.setText(str); 
    viewHolder.btndown.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v){ 
      //just handle the data ,then call adapter.notifyDataSetChanged(); 
      } 
     }); 
     viewHolder.btnup.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v){ 
       //just handle the data ,then call adapter.notifyDataSetChanged(); 
      } 
     }); 
    return convertView; 
} 
+0

Thanx Jungs. Aber ich bin immer noch fest.
Wenn ich die obigen Einstellungen ändern. Die viewHolder.btdown und btnup erhalten Fehler.
Und ich habe das notifyDataSetChanged noch nicht behandelt. Ich habe nachgesehen, und ich verstehe, was es macht. Aber ich verstehe nicht, wie ich es umsetzen soll. Ich weiß, ich muss einen Adapter vor dem Punkt der notifyDataSetChanged() hinzufügen, aber keine Ahnung, welche oder wie das funktioniert.
Zurück zu den Büchern denke ich. Oder können Sie etwas mehr erklären? –

+0

Egal Jungs. Ich habe es alleine geschafft! –