마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

★Custom ListView에서 버튼을 누를때마다 1씩 증가하게 하고싶습니다.

0 추천

 

간단하게 구성된 커스텀 리스트 뷰입니다.

첫번쨰 행에있는 + 버튼을 누르면 그행에있는 숫자 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;
	}
}

 

초보자ㅠㅠ (120 포인트) 님이 2014년 11월 4일 질문
초보자ㅠㅠ님이 2014년 11월 5일 수정

1개의 답변

0 추천

태그나 holder에 position값을 저장해두고

클릭할때 해당 위치의 InfoClass를 가져와서 count값을 고친후 notifyDataSetChanged();를 부르세요

 
alkyne (22,960 포인트) 님이 2014년 11월 5일 답변
...