2012-03-09 1 views
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 문에서 검사 목록이 올바른 단추를 선택했지만 단추가 목록의 순서를 변경합니다.

답변

0

새 액티비티에 startActivityForResult를 사용할 때 버튼의 상태를 비활성화로 설정하기 위해 버튼이 onResume을 사용하는 부모와 부모 액티비티에서 값을 반환 할 수 있습니다.

관련 문제