2012-03-09 8 views
1

最初の4つの要素がボタンであるカスタム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を使用している親から値を返すことができます。

関連する問題