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

ListView에 item의 EditText가 마지막 item것만 값이 변경됩니다

0 추천
package com.example.soda;

import java.util.ArrayList;

import android.content.Context;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class OrderListAdapter extends BaseAdapter implements OnClickListener{
	private Context context;
	private ArrayList<String> arrayList;
	ListViewHolder holder;
	
	public OrderListAdapter(Context context, ArrayList<String> arrayList) {
		super();
		this.context = context;
		this.arrayList = arrayList;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return arrayList.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return arrayList.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		View v = convertView;
		String str_menuname = arrayList.get(position);
		
		if(v == null) {
			LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			v = (RelativeLayout)inflater.inflate(R.layout.item_order, null);
			
			holder = new ListViewHolder(v);
			v.setTag(holder);
		} else {
			holder = (ListViewHolder) v.getTag();
		}
		
		holder.getText_menuName().setText(str_menuname);
		holder.getEdit_quantity();
		holder.getButton_plus().setOnClickListener(this);
		holder.getButton_minus();
		holder.getButton_remove();
		
		return v;
	}


	@Override
	public void onClick(View v) {
		int temp;
		
		switch(v.getId()) {
		case R.id.button_plus:
			temp = Integer.parseInt(holder.edit_quantity.getText().toString()) + 1;
			holder.getEdit_quantity().setText(Integer.toString(temp));
		}
	}
	
	private class ListViewHolder {
		private View v;
		private TextView text_menuname;
		private EditText edit_quantity;
		private Button button_plus;
		private Button button_minus;
		private Button button_remove;
		
		ListViewHolder(View v) {
			this.v = v;
		}
		
		TextView getText_menuName() {
			if(text_menuname == null) {
				text_menuname = (TextView) v.findViewById(R.id.text_order_menuname);
			}
			return text_menuname;
		}
		
		EditText getEdit_quantity() {
			if(edit_quantity == null) {
				edit_quantity = (EditText) v.findViewById(R.id.edit_quantity);
			}
			return edit_quantity;
		}
		
		Button getButton_plus() {
			if(button_plus == null) {
				button_plus = (Button) v.findViewById(R.id.button_plus);
			}
			return button_plus;
		}
		
		Button getButton_minus() {
			if(button_minus == null) {
				button_minus = (Button) v.findViewById(R.id.button_minus);
			}
			return button_minus;
		}
		
		Button getButton_remove() {
			if(button_remove == null) {
				button_remove = (Button) v.findViewById(R.id.button_remove);
			}
			return button_remove;
		}
	}
}

 리스트뷰 어댑터 코드구요

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
	<TextView
        android:id="@+id/text_order_menuname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:padding="10dp"
        android:text="Child" />
	<EditText
	    android:id="@+id/edit_quantity"
	    android:layout_width="50dp"
	    android:layout_height="wrap_content"
	    android:layout_alignParentRight="true"
	    android:layout_marginRight="130dp"
	    android:text="12" />
	<Button
	    android:id="@+id/button_plus"
	    android:layout_width="35dp"
	    android:layout_height="35dp"
        android:layout_marginRight="90dp"
        android:layout_alignParentRight="true"
        android:text="+" />
	<Button
	    android:id="@+id/button_minus"
	    android:layout_width="35dp"
	    android:layout_height="35dp"
        android:layout_marginRight="50dp"
        android:layout_alignParentRight="true"
        android:text="-" />
    <Button
        android:id="@+id/button_remove"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_marginRight="10dp"
        android:layout_alignParentRight="true"
        android:text="X" />
</RelativeLayout>

리스트뷰의 item.xml 코드입니다

버튼을 누르면 에디트 텍스트의 값이 1씩 증가하는 코드인데요

다른 item의 버튼을 눌러도 가장 마지막에 추가된 item의 에디트 텍스트의 값만 계속 증가하는데

각 item의 버튼이 같은 item의 에디트 텍스트 값을 증가시키게 하려면 어떻게 해야하나요?

이걸로 벌써 3일째 막혀있네요 ㅠ

위대한용샄 (220 포인트) 님이 2015년 7월 15일 질문
위대한용샄님이 2015년 7월 15일 수정

1개의 답변

+2 추천
 
채택된 답변

onClick 말고 onItemClick 을 찾으셔서 참고해보세요.

onClick은 리스트의 아이템에 포커싱 된이벤트가 아니고 리스트 어뎁트 전체에 대한 포커스가 마춰진 이벤트처리이구요.

onItemClick을 확인해보시면 아시겠지만 각 리스트내의 아이템들에 대한 포인트도 참조도 있고해서 해당 리스트아이템(열)을 대상으로 작업하실수 있을 것입니다.

아래링크도 한번 참조해보시고 android개발자 사이트에서도 onItemClickListener에 대해서도 보세요. ^^

http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-AdapterViewonItemClickListener-%EC%82%AC%EC%9A%A9%EB%B2%95

컴러기 (22,230 포인트) 님이 2015년 7월 15일 답변
위대한용샄님이 2015년 7월 25일 채택됨
답변 감사합니다! 한번 공부해봐야겠네요
...