안드로이드 개발 질문/답변
(글 수 45,052)
gridview에서 현재 폰에 있는 어플에 대한 아이콘을 불러와
이 중 몇개를 클릭하면 선택된 아이콘 바탕의 색이 변하게 하고싶습니다.
그래서 그리드뷰에 관한 클릭 리스너를 만들고
그 안에서 클릭된 뷰의 배경색을 바꿨는데
처음에는 잘 되는데
스크롤을 내렸다가 다시 올리면 엉뚱한 아이콘의 바탕색이 바껴져있네요 ㅠ.ㅠ;;
아마도 스크롤을 내렸다가 올리면 뷰가 다른데로 변경되어서 이런현상이 발생하는거 같은데
고수님들 어케 해야 되는지 조언좀 해주세요 ㅠ.ㅠ;;
package com.yginthemoon.example;
import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ResolveInfo; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.AdapterView.OnItemClickListener;
import java.util.ArrayList; import java.util.List;
public class ex extends Activity implements OnClickListener {
GridView mGrid; private select_icon c_si = new select_icon(); private notice c_n = new notice(); private ArrayList<ResolveInfo> selected_icon = new ArrayList<ResolveInfo>(); private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadApps(); // do this in onresume?
setContentView(R.layout.main); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); final List<ResolveInfo> pkgAppsList = getPackageManager().queryIntentActivities( mainIntent, 0); mGrid = (GridView) findViewById(R.id.myGrid); mGrid.setAdapter(new AppsAdapter());
View btn_make_set = findViewById(R.id.make_set); btn_make_set.setOnClickListener(this);
mGrid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ResolveInfo temp = pkgAppsList.get(position);
int result = c_si.add_icon(temp);
if(result>0)
view.setBackgroundColor(Color.GRAY);
else if(result < 0)
view.setBackgroundColor(Color.BLACK);
}
});
}
private List<ResolveInfo> mApps;
private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mApps = getPackageManager().queryIntentActivities(mainIntent, 0); }
public class AppsAdapter extends BaseAdapter {
public AppsAdapter() {
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(ex.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(100, 100));
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
return i;
}
public final int getCount() {
return mApps.size();
}
public final Object getItem(int position) {
return mApps.get(position);
}
public final long getItemId(int position) {
return position;
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}




해결했습니다.
자문자답이 되버렸네요 ㅋㅋ;;
겟뷰를 다음과 같이 수정하면 되네요 ㅋㅋ;;
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(ex.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(100, 100));
} else {
i = (ImageView) convertView;
}
ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
int result = c_si.verify_icon(position);
if(result > 0)
i.setBackgroundColor(Color.GRAY);
else
i.setBackgroundColor(Color.BLACK);
return i;
}