안드로이드 개발 질문/답변
(글 수 45,052)
ListView의 각 행에 있는 EditText의 값을 ListView 밖의 버튼을 이용하여 출력하고자 합니다.
class OrderAdapter extends BaseAdapter {
Context maincon;
//LayoutInflater Inflater;
ArrayList<OrderItem> list;
int layout;
int n;
//String m;
private String plz;
public OrderAdapter(Context context, int alayout, ArrayList<OrderItem> alist) {
maincon = context;
//Inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
list = alist;
layout = alayout;
}
/////////
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int pos = position;
if(convertView==null) {
LayoutInflater Inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//convertView = Inflater.inflate(layout, null);
convertView = Inflater.inflate(layout, parent, false);
}
ImageView img = (ImageView)convertView.findViewById(R.id.img);
img.setImageResource(list.get(position).Icon);
TextView txt = (TextView)convertView.findViewById(R.id.text);
txt.setText(list.get(position).menu);
final EditText edit = (EditText)convertView.findViewById(R.id.edit);
//edit = (EditText)convertView.findViewById(R.id.edit);
edit.setText("0");
//edit.setInputType(InputType.TYPE_CLASS_NUMBER);
//final OrderItem item = list.get(pos);
//edit.setText(item.getNum());
Button btn_plus = (Button)convertView.findViewById(R.id.plus);
btn_plus.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String num;
num = edit.getText().toString();
//int n;
n = Integer.parseInt(num);
n += 1;
//Log.d("logTest","n: "+Integer.toString(n));
edit.setText(Integer.toString(n));
plz = edit.getText().toString();
Log.d("logTest","plz+: "+plz);
}
});
Button btn_minus = (Button)convertView.findViewById(R.id.minus);
btn_minus.setOnClickListener(new Button.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
String num;
num = edit.getText().toString();
//int n;
if(!num.equals("0")) {
n = Integer.parseInt(num);
n -= 1;
edit.setText(Integer.toString(n));
plz = edit.getText().toString();
Log.d("logTest","plz-: "+plz);
}
}
});
Toast.makeText(ListActivity.this, plz, Toast.LENGTH_SHORT).show();
Log.d("logTest", "z: "+plz);
Button btn_order = (Button)convertView.findViewById(R.id.order);
btn_order.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String str = list.get(pos).menu +"/"+edit.getText().toString();
//TCPclient tp = new TCPclient(str);
//tp.run();
if(!edit.getText().toString().equals("0"))
showDialog(0, str);
else {
AlertDialog.Builder builder = new AlertDialog.Builder(ListActivity.this);
builder.setTitle("주문 확인");
builder.setMessage("수량을 선택해주세요.");
builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).show();
}
//Toast.makeText(maincon, str, Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
public String getItem(int position) {
// TODO Auto-generated method stub
return list.get(position).menu;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public String getNum() {
//return list.get(position).num;
return plz;
}
}plz라는 인스턴스 변수를 사용해서 값을 넘겨주려고 했는데요,
EditText의 초기값은 0이며 +,-버튼을 이용하여 값이 변경됩니다,
변수 사용법이 잘못되었는지 ㅠ_ㅠ 리스너 밖을 나오면서 plz가 값을 잃고맙니다..
그래서 onCreate 내에서 plz를 반환하는 메소드인 getNum()을 이용하여 EditText내의 값을 가져오고자 했는데..
값을 잃고 null 값이 넘어옵니다..어떻게하면 좋을까요..
그리고 저는 각 행마다의 EditText의 값이 필요한데, 제가 지금 하는식으로 하면
plz라는 변수가 각 행의 EditText의 값을 갱신할때마다 그 특정행에 맞게 갱신이되어 각 행의 모든 값을 가져올수가 없습니다.
혹시 해결법을 알고계신분은 댓글 달아주세면 감사하겠습니당!!!
처음 질문하는것이고 공지사항 숙지했습니다^-^




구조를 약간 손보시면 될것 같네요..만약 저라면 그런 용도의 값은 Adpater에서 position이 클릭된 position 것의 OrderItem 객체에 plz 변수 값을 넣는 부분을 만들어놓으면 나중에 이 ListView를 사용하는 Activity에서 해당 adapter를 돌려받아 각 행에 있는 모든 plz값을 가져올수가 있거든요..
지금같이 별도 함수 만들어서 하지 말구요..btn_plus, btn_minus에서 ArrayList<OrderItem> list 에 해당 position에 속하는 OrderItem 객체에 plz값을 반영하는거죠..그리고 ListView를 사용하는 activity에서 adapter를 가져와서 ArrayList<OrderItem> list를 가져오면 그 listview에 매핑된 모든 plz값을 알수 있는거죠..