繁体   English   中英

如何使用适配器更改列表视图中的文本

[英]How can I change text within a listview, using a adapter

您能帮我吗,我正在学习! ;-)

我有两个按钮“ +”和“-”,我希望它们按一个上或一个下增加或减少金额。 我如何确保它仅对使用适配器的正确文本视图有效。
现在,所有按钮仅影响第一个按钮。 我知道我必须获取数组的位置/ 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));
}

}

您的问题似乎出在displayAantal(int)方法中,尤其是在此行中:

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

您无需在此处重新初始化该字段,因为它已经在getView()初始化了:

viewHolder.Aantal = (TextView) convertView.findViewById(R.id.Aantal);
 @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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM