-1

status=1 のカスタム BaseAdapter を使用してカスタム ListView を作成したい、CheckBox を表示したい、そうでなければ textView を表示したい..


私の与えられた条件は次のとおりです。

 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;
    }

}
4

2 に答える 2

3

ListViewスクロールすると、行のレイアウトが再利用されます。TextViewある時点でまたはを非表示CheckBoxにし、Androidがその行を再利用すると、Viewは非表示のままになります。

あなたがしなければならないのはあなたが見せたいすべてのためView.VISIBLEにあなたのgetView()メソッドで可視性を設定することです。View

于 2012-07-04T10:39:52.050 に答える
0

私は間違いを犯しました...コード内で私はこのような条件を作りました

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 を INVISIBLE として宣言しました。現在、コードはうまく機能しています。

于 2012-07-05T09:13:51.940 に答える