2012-07-04 43 views
0

我想使用Custom BaseAdapter创建自定义ListView,其中status = 1,我想显示CheckBox,否则我想显示textView .. 如何在自定义BaseAdapter的getView中创建条件


我给出的条件是:

if (NewtheStatus == 1) { 
        alreadyOrderText 
        .setVisibility(TextView.GONE); 

       } 
       else{ 
        checkBox.setVisibility(CheckBox.GONE); 

       } 

但有些时候我获得一些既没有checkBox也没有TextView的行。


我的自定义BaseAdapter的代码如下所示。

private class MyCustomAdapter extends BaseAdapter { 

    private static final int TYPE_ITEM = 0; 
    private static final int TYPE_ITEM_WITH_HEADER = 1; 
    // private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1; 

    private ArrayList<WatchListAllEntity> mData = new ArrayList(); 
    private LayoutInflater mInflater; 
    private ArrayList<WatchListAllEntity> items = new ArrayList<WatchListAllEntity>(); 

    public MyCustomAdapter(Context context, 
      ArrayList<WatchListAllEntity> items) { 

     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public void addItem(WatchListAllEntity watchListAllEntity) { 
     // TODO Auto-generated method stub 
     items.add(watchListAllEntity); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     View v = convertView; 
     final int position1 = position; 
     if (v == null) { 

      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.listitempict, null); 
     } 
     watchListAllEntity = new WatchListAllEntity(); 
     watchListAllEntity = items.get(position); 
     Log.i("position: iteamsLength ", position + ", " + items.size()); 
     if (watchListAllEntity != null) { 

      ImageView itemImage = (ImageView) v 
        .findViewById(R.id.imageviewproduct); 

      if (watchListAllEntity.get_thumbnail_image_url1() != null) { 
       Drawable image = ImageOperations(watchListAllEntity 
         .get_thumbnail_image_url1().replace(" ", "%20"), 
         "image.jpg"); 

       // itemImage.setImageResource(R.drawable.icon); 

       if (image != null) { 
        itemImage.setImageDrawable(image); 
        itemImage.setAdjustViewBounds(true); 
       } else { 

        itemImage.setImageResource(R.drawable.iconnamecard); 
       } 

       Log.i("status_ja , status", 
         watchListAllEntity.get_status_ja() + " ," 
           + watchListAllEntity.getStatus()); 

       int NewtheStatus = Integer.parseInt(watchListAllEntity 
         .getStatus()); 
       CheckBox checkBox = (CheckBox) v 
         .findViewById(R.id.checkboxproduct); 
       TextView alreadyOrderText = (TextView) v 
         .findViewById(R.id.alreadyordertext); 
       if (NewtheStatus == 1) { 
        alreadyOrderText 
        .setVisibility(TextView.GONE); 

       } 
       else{ 
        checkBox.setVisibility(CheckBox.GONE); 

       } 
       Log.i("Loading ProccardId: ", 
         watchListAllEntity.get_proc_card_id() + ""); 
       checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
         WatchListAllEntity watchListAllEntity2 = items 
           .get(position1); 
         Log.i("Position: ", position1 + ""); 
         // TODO Auto-generated method stub 
         if (isChecked) { 


           Constants.orderList.add(watchListAllEntity2 
             .get_proc_card_id()); 
           Log.i("Proc Card Id Add: ", 
             watchListAllEntity2 
               .get_proc_card_id() + ""); 


         } else { 
          Constants.orderList.remove(watchListAllEntity2 
            .get_proc_card_id()); 
          Log.i("Proc Card Id Remove: ", 
            watchListAllEntity2.get_proc_card_id() 
              + ""); 

         } 

        } 
       }); 
      } 

     } 

     return v; 
    } 

    private Drawable ImageOperations(String url, String saveFilename) { 
     try { 
      InputStream is = (InputStream) this.fetch(url); 
      Drawable d = Drawable.createFromStream(is, "src"); 

      return d; 
     } catch (MalformedURLException e) { 
      return null; 
     } catch (IOException e) { 
      return null; 
     } 
    } 

    public Object fetch(String address) throws MalformedURLException, 
      IOException { 
     URL url = new URL(address); 
     Object content = url.getContent(); 
     return content; 
    } 

    public int getCount() { 
     // TODO Auto-generated method stub 
     int sizef=items.size(); 
     Log.i("Size", sizef+""); 
     return items.size(); 
    } 

    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return items.get(position); 
    } 

    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

} 
+0

所以你知道哪一行没有得到TextView或CheckBox。现在检查该位置的logcat什么是我检查过的NewtheStatus –

+0

的值。在调试代码的情况下工作正常,但是,当调试完成时,输出是错误的.. – TKumar

回答

1

我创建了一个错误... 里面我的代码,我犯了这样的

if (NewtheStatus == 1) { 
    alreadyOrderText.setVisibility(TextView.GONE); 
} else { 
    checkBox.setVisibility(CheckBox.GONE); 
} 

正确的代码一个条件是:

if (NewtheStatus == 1) { 
    alreadyOrderText.setVisibility(TextView.INVISIBLE); 
    checkBox.setVisibility(CheckBox.VISIBLE); 
} else { 
    checkBox.setVisibility(CheckBox.INVISIBLE); 
    alreadyOrderText.setVisibility(TextView.VISIBLE); 
} 

和我的XML里面,我宣布CheckBox和的TextView那些是不可见的。现在代码运行良好。

3

当您滚动时,ListView将重用行的布局。如果您在某个时间隐藏了TextViewCheckBox,并且Android重新使用该行,则View将保持隐藏状态。

您需要做的就是在getView()方法中为要显示的每个View设置View.VISIBLE的可见性。

相关问题