2016-07-28 2 views
0

Можете ли вы мне помочь, я учусь! ;-)Как изменить текст в списке, используя адаптер

У меня есть две кнопки «+» и «-», и я хочу, чтобы они увеличивали или уменьшали количество на один или на один. Как я могу убедиться, что это повлияет только на правильное текстовое изображение с помощью адаптера.
Теперь все кнопки влияют только на первый. Я знаю, что мне нужно получить позицию/id массива. Но я не знаю, как это сделать.

КСТАТИ
Мерк = Марка
Aantal = Сумма

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)); 
} 

}

ответ

0

ваша проблема, кажется, в вашем методе displayAantal(int), в частности, в этой строке:

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

Вам не нужно повторно инициализировать это поле здесь, так как это уже initia lized внутри 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 ребята. Но я все еще застрял.
Когда я изменяю вышеуказанные настройки. ViewHolder.btndown и btnup получают ошибки.
И еще не обработал notifyDataSetChanged. Я посмотрел на него, и я понимаю, что он делает. Но я не понимаю, как его реализовать. Я знаю, что мне нужно добавить адаптер перед точкой notifyDataSetChanged(), но не имеет понятия, какой из них или как это работает.
Назад к книгам Я думаю. Или вы, ребята, объясните немного больше. –

+0

Ничего, ребята. Мне удалось разобраться в этом самостоятельно! –