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

listview 체크박스 연동

0 추천
package com.andro;
 
import java.util.List;
 
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.TextView;
 
public class PackageAppsAdapter extends BaseAdapter {
 
private final LayoutInflater mInflater;
private PackageManager mPackageManager;
private List<AppInfo> mAppInfo;
 
public PackageAppsAdapter(Context context, List<AppInfo> list) {
super();
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mPackageManager = context.getPackageManager();
mAppInfo = list;
 
}
 
public View getView(int position, View convertView, ViewGroup parent) {
 
final Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = mInflater.inflate(R.layout.add_list_item, parent, false);
holder.tv_activityName = (TextView) convertView.findViewById(R.id.activityName);
holder.tv_activityName.setVisibility(View.GONE);
 
holder.tv_appName = (TextView) convertView.findViewById(R.id.appName);
holder.iv_appImage = (ImageView) convertView.findViewById(R.id.icon);
holder.cb_check = (CheckBox) convertView.findViewById(R.id.checkbox);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
 
holder.cb_check.setTag(position);
 
if(holder.cb_check!=null){
holder.cb_check.setOnCheckedChangeListener(new OnCheckedChangeListener(){
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
               // TODO Auto-generated method stub
               Integer id = (Integer) buttonView.getTag();
               AppInfo appList = mAppInfo.get(id);
               appList.isCheck = isChecked;                
               mAppInfo.set(id, appList);            
               
           }
       });
}
 
AppInfo appList = mAppInfo.get(position);
holder.tv_appName.setText(appList.appName);
try {
Drawable drawable = mPackageManager.getApplicationIcon(appList.packageName);
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
bitmap = Bitmap.createScaledBitmap(bitmap, 48, 48, true);
holder.iv_appImage.setImageBitmap(bitmap);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return convertView;
}
 
public int getCount() {
return mAppInfo.size();
}
 
public Object getItem(int position) {
return mAppInfo.get(position);
}
 
public long getItemId(int position) {
return position;
}
 
public class Holder{
TextView tv_appName;
TextView tv_activityName;
ImageView iv_appImage;
CheckBox cb_check;
}
 
}
 
 
어댑터에 getview에 리스너 이벤트입니다. 체크박스를 클릭하면,
 
다른 체크박스들도 클릭이 됩니다. 이걸 어떻게 해결 해야 할까요?
 
리스트에서 다른 객체로 닮는 어댑터입니다.
 
 
익명사용자 님이 2014년 7월 3일 질문

1개의 답변

0 추천
아이고 ㅋㅋㅋ 어디서 많이본거같다 했는데 제가 드린 소스네요ㅋㅋ

AppInfo appList = mAppInfo.get(position);밑에 추가해주시면됩니다
 
holder.cb_check.setChecked(appList.isCheck); 이부분을 빼먹었습니다

holder패턴을 적용시키면 이전에있던 View를 재사용하기때문에

반드시 데이터 삽입을 해주어야합니다
whdrb19 (23,520 포인트) 님이 2014년 7월 3일 답변
아 감사합니다. 바로 해결 되었네요. 덕분에 소스 잘 사용 하고 있습니다. 관련소스에 대해 하나만 더 여쭙고 싶습니다. 제가 어플 순서를 바꾸고자 하는데.. 어떻게 불러와야 할까요?
어떤식으로 바꾸실건데요 ㄱ-ㅎ 이런식으로요?
노티바에 뿌려진 어플 텍스트나 이미지를 다른 액티비티에서 불러와뷰의 위치를 서로 바꿀 수 있도록 설정 하여, 완료가 되면 노티바에서의 어플 위치가 바뀌게 하고자합니다..ㅎ
...