2012-09-25 2 views
1

현재 온라인 foodItem 주문과 관련된 Android 앱 개발에 참여했습니다. 나는 다음과 같은 스키마리스트 뷰를했습니다 :안드로이드의 CheckBox를 사용하여 ListView에서 확인 된 행을 추적하는 방법

itemName1 itemPrice1 checkBox 
itemName2 itemPrice2 checkBox 
itemName3 itemPrice3 checkBox 
      . 
      . 
      . 


      GetYourCart[Button] 

내 작업은 사용자가 버튼을 누를 때 가격과 총 가격으로 선택 itemNames에 각각의 트랙을 유지하는 것입니다. SparseBooleanArray sbArray = myMenulist.getCheckedItemPositions();을 사용했지만 결과가 표시되지 않습니다.

어떻게 구현할 수 있습니까? 나는 stackoverflow 및 다른 온라인 자습서에서 물어 몇 가지 질문을 통과했지만 그것을 얻을 수 없습니다.

편집 : 사전에

btnyourCart.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       String selected = ""; 
       int cntChoice = myMenulist.getCount(); 
       SparseBooleanArray sbArray = myMenulist.getCheckedItemPositions(); 
       for(int i=0;i<cntChoice;i++){ 
        if(sbArray.get(i)) { 

         selected += myMenulist.getItemAtPosition(i).toString() + "\n"; 



        } 


       } 
       Log.e("menu","Items "+selected); 
       Toast.makeText(getApplicationContext(), selected, Toast.LENGTH_SHORT).show(); 


      } 
     }); 

감사 : 여기가 그 결과를 확인하는 데 사용 선택한 항목에 대한 코드입니다!

+0

확인란의 체크 코드를 붙여 넣으면 그 곳에서 업데이트됩니다. –

+0

@hardikjoshi 코드 – Jivan

+0

으로 질문을 수정했습니다. 해결 했습니까? –

답변

1
int total=0; 

btnyourCart.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      String selected = ""; 
      int cntChoice = myMenulist.getCount(); 
      SparseBooleanArray sbArray = myMenulist.getCheckedItemPositions(); 
      for(int i=0;i<cntChoice;i++){ 
       if(sbArray.get(i)) { 

        selected += myMenulist.getItemAtPosition(i).toString() + "\n"; 

        total+=myMenulist.get(i).price; 

       } 


      } 
      Log.e("menu","Items "+selected); 
      Toast.makeText(getApplicationContext(), selected, Toast.LENGTH_SHORT).show(); 


     } 
    }); 

이제 버튼 클릭 이벤트에 총을 얻을.

button.setOnClickListenernew View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Toast.makeText(
        this, 
        ""+total, 
        Toast.LENGTH_LONG).show(); 

     } 
    }); 
+0

작동하지 않으며 의심의 여지가없는 경우 사용해보십시오. –

+0

http://pastebin.com/WjtM5msb 링크를 사용하여 마침내 아이디어를 얻었습니다. 감사! – Jivan

+0

@ Zane 가장 환영하는 친구. –

0

사용자는 getView() 메소드의 사용자 정의 어댑터에서 목록 위치에 체크 박스 값을 유지하고 해당 값을 배열에 저장해야합니다. 그러면 확인란의 값이 위치와 함께 유지됩니다.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 

     if(convertView == null){ 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.list_layout, null); 
      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.checkBox = (CheckBox) view.findViewById(R.id.del_many_task_chk); 
      viewHolder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        Model element = (Model) viewHolder.checkBox.getTag(); 
        element.isChecked = buttonView.isChecked(); 
       } 
      }); 
      view.setTag(viewHolder); 
      viewHolder.checkBox.setTag(list.get(position)); 
     }else{ 
      view = convertView; 
      ((ViewHolder)view.getTag()).checkBox.setTag(list.get(position)); 
     } 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.checkBox.setChecked(list.get(position).isChecked); 
     return view; 
    } 

이제 어떤 체크 박스가 선택되었는지를 알아야 할 때 반복기를 사용하여 목록 항목을 검토해야합니다. 체크 박스 값에 따라 체크되고 체크되지 않은 항목을 얻으려면.

for(int i=0;i<list.size();i++){ 
    if(all_task_list.get(i).isChecked){ 
     // to do things for checked item 
    }else{ 
     // to do things for uncheck item 
    } 
} 
관련 문제