ListViewの各行にButtonとTextViewがあるListViewinがあるアプリケーションを開発しています。値を増やして、ボタンクリック時のTextViewにTextViewで表示したいのですが、ボタンをクリックすると、行ごとに値が増えますが、最後の行のTextViewの変更はすべての行でクリックされたボタンに関係なく表示されます。同じ行のTextViewの中の特定の行の変更を表示する方法各TextViewの各行の変更された値を反映する方法
ここが私のコードです:
MainActivity.java
public class MainActivity extends AppCompatActivity implements MyAd.customButtonListener {
ListView lv;
int q=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv= (ListView) findViewById(R.id.list);
MyAd ma=new MyAd(this);
ma.setCustomButtonListner(this);
lv.setAdapter(ma);
}
@Override
public void onButtonClickListner(int position,TextView t) {
q=q+1;
t.setText(""+q);
}
}
MyAd.java
class MyAd extends BaseAdapter {
int q = 0, a[];
List<ListItem> li = new ArrayList<>();
Context c;
MyViewHolder mvh;
customButtonListener customListner;
MyAd(Context c) {
this.c = c;
Resources res = c.getResources();
String title[] = res.getStringArray(R.array.title);
a = new int[title.length];
for (int i = 0; i < title.length; i++) {
li.add(new ListItem(title[i]));
}
}
public interface customButtonListener {
void onButtonClickListner(int position, TextView t);
}
public void setCustomButtonListner(customButtonListener listener) {
this.customListner = listener;
}
@Override
public int getCount() {
return li.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
View row = view;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item, parent, false);
mvh = new MyViewHolder(row);
row.setTag(mvh);
} else {
mvh = (MyViewHolder) row.getTag();
}
ListItem sr = li.get(position);
//String s=sr.title;
mvh.txt.setText(sr.title);
mvh.bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
q = a[position];
q++;
a[position] = q;
mvh.quan.setText(String.valueOf(a[position]));
System.out.println("position:" + position + "-" + q);
System.out.println("array: " + Arrays.toString(a));
}
});
notifyDataSetChanged();
return row;
}
class MyViewHolder {
TextView txt, quan;
Button bt;
MyViewHolder(View row) {
txt = row.findViewById(R.id.txt);
quan = row.findViewById(R.id.quan);
bt = row.findViewById(R.id.button);
}
}
}
ListItem.java
public class ListItem {
String title;
ListItem(String title)
{
this.title=title;
}
}
私は私が提案し何をしようと@AnkitSrivastava getViewメソッド()メソッド –