2016-07-28 76 views
0

你能幫我一把,我在學習! ;-)如何使用適配器在列表視圖中更改文本

我有兩個按鈕「+」和「 - 」,我希望他們增加或減少一個或一個下降的金額。我如何確保它只對使用適配器的正確的文本視圖有效。
現在所有的按鈕隻影響第一個。我知道我必須得到數組的位置/ ID。但我不知道如何。

BTW
默克=品牌
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); 

您不需要在這裏重新初始化該字段,因爲它已經開始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

感謝名單的傢伙。但我仍然堅持。
當我改變上面的設置。 viewHolder.btndown和btnup獲取錯誤。
而我還沒有處理notifyDataSetChanged。我查了一下,我明白它的作用。但我不明白如何實現它。 我知道我需要在notifyDataSetChanged()的前面添加一個適配器,但不知道該如何工作。
回到書我想。或者你們可以多解釋一下。 –

+0

沒關係傢伙。我設法弄清楚了我自己! –

相關問題