2016-07-28 7 views
0

私を助けてもらえますか? ;-)アダプターを使用してリストビュー内のテキストを変更するにはどうすればいいですか?

私は2つのボタン "+"と " - "を持っています。それらを1つずつ上または下に増減したいと思います。アダプターを使用して正しいテキストビューに効果があることを確認するにはどうすればよいですか。
すべてのボタンは、最初のボタンにのみ適用されます。私は配列の位置/ 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); 

このフィールドは既に初期化されているので、ここで再初期化する必要はありませんgetView()内lized:

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

決して男の子。私は自分自身でそれを把握することができました! –

関連する問題