2016-07-28 5 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); 

이미 초기화되어 있으므로 여기에서 해당 필드를 다시 초기화 할 필요가 없습니다. 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

절대 얘들 아. 나는 그럭저럭 그것을 독립해서 계산할 수 있었다! –

관련 문제