
간단하게 구성된 커스텀 리스트 뷰입니다.
첫번쨰 행에있는 + 버튼을 누르면 그행에있는 숫자 1이 변경되야하는데
엉뚱하게 마지막에있는 1이 변경이됩니다.
다른 버튼을 눌러도 마지막에있는 1이 변경되구요.
구글검색결과 각 행의 1을 배열을 통해서 저장해야한다는데... 어떻게 하는지 감이 안잡힙니다. ㅠㅠ
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/menuname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btn_button"
android:layout_alignBottom="@+id/btn_button"
android:layout_toRightOf="@+id/btn_button"
android:text="ListView 입니다." />
<Button
android:id="@+id/minus"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="-"
android:focusable="false" />
<TextView
android:id="@+id/count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btn_button"
android:layout_alignBottom="@+id/btn_button"
android:layout_alignParentLeft="true"
android:text="1" />
<Button
android:id="@+id/plus"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/tv_title"
android:focusable="false"
android:text="+" />
</LinearLayout>
</LinearLayout>
아답타
package arabiannight.tistroy.com.listview.adapter;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import arabiannight.tistroy.com.listview.R;
import arabiannight.tistroy.com.listview.data.InfoClass;
public class CustomArrayAdapter extends ArrayAdapter<InfoClass>{
private ViewHolder viewHolder = null;
private LayoutInflater inflater = null;
private ArrayList<InfoClass> infoList = null;
private Context mContext = null;
private int cnt = 1;
public CustomArrayAdapter(Context c, int textViewResourceId,
ArrayList<InfoClass> arrays) {
super(c, textViewResourceId, arrays);
this.inflater = LayoutInflater.from(c);
this.mContext = c;
}
@Override
public int getCount() {
return super.getCount();
}
@Override
public InfoClass getItem(int position) {
return super.getItem(position);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public View getView(int position, View convertview, ViewGroup parent) {
View v = convertview;
if(v == null){
viewHolder = new ViewHolder();
v = inflater.inflate(R.layout.list_row, null);
viewHolder.menuname = (TextView)v.findViewById(R.id.menuname);
viewHolder.minus = (Button)v.findViewById(R.id.minus);
viewHolder.count = (TextView)v.findViewById(R.id.count);
viewHolder.plus = (Button)v.findViewById(R.id.plus);
v.setTag(viewHolder);
}else {
viewHolder = (ViewHolder)v.getTag();
viewHolder.count = (TextView)v.getTag();
}
viewHolder.minus.setText(getItem(position).minus);
viewHolder.minus.setOnClickListener(buttonClickListener);
viewHolder.minus.setTag(position);
viewHolder.count.setText(getItem(position).count);
viewHolder.minus.setTag(position);
viewHolder.plus.setText(getItem(position).plus);
viewHolder.plus.setOnClickListener(buttonClickListener);
viewHolder.plus.setTag(position);
return v;
}
public void setArrayList(ArrayList<InfoClass> arrays){
this.infoList = arrays;
}
public ArrayList<InfoClass> getArrayList(){
return infoList;
}
private View.OnClickListener buttonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.plus:
cnt++;
viewHolder.count.setText(String.valueOf(cnt));
break;
case R.id.minus:
cnt--;
viewHolder.count.setText(String.valueOf(cnt));
if(cnt<0){
cnt = 0;
viewHolder.count.setText(cnt);
}
break;
default:
break;
}
}
};
/*
* ViewHolder
*/
class ViewHolder{
public TextView menuname = null;
public Button plus = null;
public TextView count = null;
public Button minus = null;
}
@Override
protected void finalize() throws Throwable {
free();
super.finalize();
}
private void free(){
inflater = null;
infoList = null;
viewHolder = null;
mContext = null;
}
}