2012-03-09 51 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將按鈕狀態設置爲禁用狀態。

相關問題