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

리스트어댑터에서 체크값 전달하는데 값이 하나만 넘어갑니다...

0 추천

food1리스트뷰에 체크된 값들을 food1에서 order_food1_btn을 눌리면 Pay로 체크된값들만 넘어가는데 체크를 한개만 하여 넘기는것은 잘되는데 여러개를 체크한 뒤에 넘기게 되면 값이 하나만 넘어갑니다...

값 넘기는 건 겨우 해결했는데...ㅠ 체크 된 값들이 모두 넘어가질 않네요.... 이유를 모르겠습니다.

혹시 조언이나 예제있으면 알려주시면 감사하겠습니다..

public class Food1_ListAdapter extends BaseAdapter {

	Activity context;
	ArrayList<JOrder> arrList;
	JOrder Jorder;
	int layout;

	public Food1_ListAdapter(Activity context, ArrayList<JOrder> arrList,
			int layout) {
		this.context = context;
		this.arrList = arrList;
		this.layout = layout;
	}

	public int getCount() {
		// TODO Auto-generated method stub
		return arrList.size();
	}

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

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

	public View getView(final int position, View convertView, ViewGroup parent) {
		View v = null;
		if (convertView == null) {
			v = context.getLayoutInflater().inflate(layout, null);
		} else {
			v = convertView;
		}

		TextView food1_list_menu = (TextView) v.findViewById(R.id.food1_list_menu);
		TextView food1_list_price = (TextView) v.findViewById(R.id.food1_list_price);
		final CheckBox food1_list_choice = (CheckBox) v
				.findViewById(R.id.food1_list_choice);

		food1_list_choice
				.setOnCheckedChangeListener(new OnCheckedChangeListener() {

					public void onCheckedChanged(CompoundButton buttonView,
							boolean isChecked) {
						JOrder jOrder;

						jOrder = arrList.get(position);

						if (food1_list_choice.isChecked()) {

							jOrder.setChoice(true);
							arrList.add(jOrder);
							Toast.makeText(context, "체크되었습니다",
									Toast.LENGTH_SHORT).show();
						} else {
							jOrder.setChoice(false);
							Toast.makeText(context, "체크가 해제되었습니다.",
									Toast.LENGTH_SHORT).show();
						}

					}
				});

		JOrder jOrder;

		jOrder = arrList.get(position);

		food1_list_menu.setText(jOrder.getMenu());
		// jOrder.setAmount(food1_list_amount.getText().toString());
		food1_list_price.setText("" + jOrder.getPrice());

		return v;
	}

}

--------------------------------------------------------------
public class Food1 extends Activity implements OnClickListener {

	Button order_btn;
	ArrayList<JOrder> jOrder_lit;
	ListView food1_list;
	JOrder jorder = new JOrder();
	String test = "";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.food1);

		food1_list = (ListView) findViewById(R.id.food1_list);

		onFood1List();

		order_btn = (Button) findViewById(R.id.order_food1_btn);

		order_btn.setOnClickListener(this);

	}

	public void onClick(View v) {

		if (v.getId() == R.id.order_food1_btn) {
			Food1_ListAdapter food1 = new Food1_ListAdapter(getParent(),
					jOrder_lit, R.id.food1_list);
			JOrder jorder = new JOrder();

			for (int i = 0; i < food1.arrList.size(); i++) {
				jorder = food1.arrList.get(i);
 
			}
			if (jorder.isChoice() == true) {
				ArrayList<JOrder> jOrder_lit = new ArrayList<JOrder>();
				jOrder_lit.add(jorder);
				Intent order_intent = new Intent(this, Pay.class);
				order_intent.putExtra("order_list", jOrder_lit);
				startActivity(order_intent);
			}
		}
	}

	private void onFood1List() {
		ServerRequest request = new ServerRequest();

		Map<String, String> map = new HashMap<String, String>();
		request.Order_List(map, handler, 100);
	}

	Handler handler = new Handler() {

		public void handleMessage(Message msg) {
			super.handleMessage(msg);

			if (msg.what == 100) {
				jOrder_lit = (ArrayList<JOrder>) msg.obj;

				food1_list.setAdapter(new Food1_ListAdapter(Food1.this,
						jOrder_lit, R.layout.food1_layout));

				food1_list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

			} else {
				Toast.makeText(getApplicationContext(), "fail",
						Toast.LENGTH_SHORT).show();
			}
		}
	};

}

 

곰돌이12 (370 포인트) 님이 2015년 11월 25일 질문

1개의 답변

0 추천
 
채택된 답변
public void onClick(View v) {
        if (v.getId() == R.id.order_food1_btn) {
            Food1_ListAdapter food1 = new Food1_ListAdapter(getParent(),
            jOrder_lit, R.id.food1_list);
            JOrder jorder = new JOrder();

            for (int i = 0; i < food1.arrList.size(); i++) {
                jorder = food1.arrList.get(i);
            }

            if (jorder.isChoice() == true) {
                ArrayList<JOrder> jOrder_lit = new ArrayList<JOrder>();
                jOrder_lit.add(jorder);
                Intent order_intent = new Intent(this, Pay.class);
                order_intent.putExtra("order_list", jOrder_lit);
                startActivity(order_intent);
            }
        }
    }

 

for문이 전부 다 돌아간 뒤에 마지막 하나가지고 isChoice 인지 체크 하니까 하나만 들어갈꺼 같은데요?

아래와같이 변경해야될꺼 같네용. 아마 여러개 넘어갈껍니다. 그런데 

체크 리스너 보니 add 만해주고 중복제거 안해주는걸로 봐서는 또 문제 생길껍니다 ㅇㅅㅇ;;;

미리 힌트를 드리자면 따로 해쉬맵에 상품 키워드로 체크시에는 등록 및 업데이트 해주고

해제시에는 키 삭제 하는 방식으로 구성한 뒤에 ArrayList 로 변환해서 Intent 에 넘기면 다 해결될듯 하네요

ArrayList<JOrder> jOrder_lit = new ArrayList<JOrder>();

for (int i = 0; i < food1.arrList.size(); i++) {

      jorder = food1.arrList.get(i);

      if (jorder.isChoice() == true) {

             jOrder_lit.add(jorder);

      }

}

Intent order_intent = new Intent(this, Pay.class);

order_intent.putExtra("order_list", jOrder_lit);

startActivity(order_intent);

라쎄린드 (25,460 포인트) 님이 2015년 11월 25일 답변
곰돌이12님이 2015년 11월 25일 채택됨
아 맞네요.. for문에서 0번째를 들고오면 그값을 체크하여 넣어주고 돌려주고 해서 여러개 들어가겠네요..나중에 집에 가서 해보겠습니다. 감사합니다!!
그리고, 힌트주신대로 해쉬맵 구성방식으로 한번 해볼게요. 그까진 생각못했네요...ㅎㅎ
...