1
처음 네 개의 요소가 버튼으로 구성된 사용자 지정 ListView가 있습니다. 버튼을 클릭하면 새로운 액티비티로 이동하고, 새 액티비티에서는 무엇이든 수행 한 다음 반환합니다. 내가 돌아 왔을 때, 나는 체크하기 위해 때리는 버튼을 원한다. 그러나 가끔씩 (그리고 때로는) 잘못된 박스를 체크하고 왜 그럴 수 없는지.ListView는 다른 액티비티에서 반환 될 때 순서를 바꿉니다.
private class MyCustomAdapter extends BaseAdapter {
private static final int TYPE_BUTTON = 0;
private static final int TYPE_INFO = 1;
private static final int TYPE_PICTURE = 2;
private static final int TYPE_MAX_COUNT = 3;
private int totalCount = 0;
private ArrayList<String> mData = new ArrayList<String>();
private LayoutInflater mInflater;
public MyCustomAdapter() {
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addButton(final Button btn) {
mButtons.add(btn);
totalCount = totalCount + 1;
notifyDataSetChanged();
}
public void addInfo(final String info) {
mInfo.add(info);
totalCount = totalCount + 1;
notifyDataSetChanged();
}
public void addPicture(final Bitmap pic) {
mPictures.add(pic);
totalCount = totalCount + 1;
notifyDataSetChanged();
}
public void addItem(final String item) {
mData.add(item);
totalCount = totalCount + 1;
notifyDataSetChanged();
}
@Override
public int getCount() {
return totalCount;
}
@Override
public String getItem(int position) {
return "TEST 5000";
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
if (position <= 3) {
return TYPE_BUTTON;
}
if (mInfo.size() + 3 >= position) {
return TYPE_INFO;
} else {
return TYPE_PICTURE;
}
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case TYPE_BUTTON:
convertView = mInflater.inflate(R.layout.button, null);
holder.btn = (Button)convertView.findViewById(R.id.btn);
holder.btn.setText(mButtons.get(position).getText().toString());
holder.btn.setLayoutParams(new LinearLayout.LayoutParams(mButtons.get(position).getLayoutParams().width, mButtons.get(position).getLayoutParams().height));
break;
case TYPE_INFO:
convertView = mInflater.inflate(R.layout.incident_summary_items, null);
holder.textView = (TextView)convertView.findViewById(R.id.text);
holder.textView.setText(mInfo.get(position-4));
break;
case TYPE_PICTURE:
convertView = mInflater.inflate(R.layout.image, null);
holder.imageView = (ImageView)convertView.findViewById(R.id.pic);
holder.imageView.setImageBitmap(mPictures.get(position-4-mInfo.size()));
}
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
switch(type) {
case TYPE_BUTTON:
holder.btn.setText(mButtons.get(position).getText().toString());
holder.btn.setLayoutParams(new LinearLayout.LayoutParams(mButtons.get(position).getLayoutParams().width, mButtons.get(position).getLayoutParams().height));
break;
case TYPE_INFO:
holder.textView.setText(mInfo.get(position-4));
break;
case TYPE_PICTURE:
holder.imageView.setImageBitmap(mPictures.get(position-4-mInfo.size()));
break;
}
}
return convertView;
}
}
public static class ViewHolder {
public TextView textView;
public ImageView imageView;
public Button btn;
}
여기에 내가 체크 박스를 설정하고 새로운 활동 호출 내 코드입니다 : 여기 내 사용자 지정 어댑터 내 코드 내가 선에서 주석 경우 내가 찾은
public void myClickHandler(View v)
{
//get the row the clicked button is in
vwParentRow = (LinearLayout)v.getParent();
btnChild = (Button)vwParentRow.getChildAt(0);
if (btnChild.getText().toString().equals("Take Information")) {
btnChild.setCompoundDrawablesWithIntrinsicBounds(null,null,mCheckMark,null);
Intent intent = new Intent(this, Info.class);
startActivityForResult(intent, 1);
}
if (btnChild.getText().toString().equals("Take Pictures")) {
btnChild.setCompoundDrawablesWithIntrinsicBounds(null,null,mCheckMark,null);
Intent intent = new Intent(this, Pictures.class);
startActivityForResult(intent, 2);
}
}
는
holder.btn.setText(mButtons.get(position).getText().toString());
holder.btn.setLayoutParams(new LinearLayout.LayoutParams(mButtons.get(position).getLayoutParams().width, mButtons.get(position).getLayoutParams().height));
내 사용자 지정 목록 어댑터의 else 문에서 검사 목록이 올바른 단추를 선택했지만 단추가 목록의 순서를 변경합니다.