簡體   English   中英

當我在 getView() 中將某些項目設置為 view.invisible 時,其他項目不會出現

[英]When I set some items to view.invisible in getView(), others don't appear

Visi在我的自定義適配器 getView 方法中,我有一個用於不同類型布局單元格的開關盒。 我為這些單元格引用了一個布局 xml,並通過 setVisibility(View....) 顯示/隱藏某些元素 在我的第一個單元格“StreamLayout”中,我只想顯示一個 imageView,“Boombox”。 我將此圖像視圖設置為在所有其他布局中不可見,但是當我這樣做時,它不會出現在第一個布局中。 我將提供我的 getView 方法和我的布局 xml:

獲取視圖:

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

        holder = null;
        int type = getItemViewType(position);

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.listview_cell, null);
            holder = new ViewHolder();
        } else {
            holder = (ViewHolder) convertView.getTag();
        }



         switch (type) {

                case STREAM_LAYOUT:

                    convertView = mInflater.inflate(R.layout.listview_cell, null);

                    ImageView boombox = (ImageView) convertView.findViewById(R.id.boombox).setVisibility(View.Visible);




                    convertView.findViewById(R.id.cell_image).setVisibility(View.GONE);

                        convertView.findViewById(R.id.divider).setVisibility(View.GONE);
                        convertView.findViewById(R.id.song).setVisibility(View.GONE);
                        convertView.findViewById(R.id.artist).setVisibility(View.GONE);
                        convertView.findViewById(R.id.bottom_layout).setVisibility(View.GONE);


                    convertView.setTag(holder);


                case TALKSET_LAYOUT:
                    convertView.findViewById(R.id.boombox).setVisibility(View.GONE);

                    convertView.findViewById(R.id.cell_image).setVisibility(View.GONE);
                    convertView.findViewById(R.id.divider).setVisibility(View.GONE);
                    convertView.findViewById(R.id.playcut).setVisibility(View.GONE);

                    holder.talkset = (TextView) convertView.findViewById(R.id.talk_break_text);
                    holder.talkset.setText("TALKSET");

                    holder.talkset_icon = (ImageView) convertView.findViewById(R.id.talk_break_image);
                    holder.talkset_icon.setImageResource(R.drawable.temp_talkset);

                    convertView.setTag(holder);
                    break;

                case BREAKPOINT_LAYOUT:

                    convertView.findViewById(R.id.boombox).setVisibility(View.GONE);
                    convertView.findViewById(R.id.cell_image).setVisibility(View.GONE);
                    convertView.findViewById(R.id.divider).setVisibility(View.GONE);
                    convertView.findViewById(R.id.artist).setVisibility(View.GONE);



                       //convertView.findViewById(R.id.boombox).setVisibility(View.GONE);

                long l = Long.parseLong(oslist.get(position).get("hour"));

                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(l);
                calendar.setTimeInMillis(l * 1000);

                int hour = calendar.get(Calendar.HOUR);

                holder.song.setText("Breakpoint: "+hour+":00");

                    holder.breakpoint = (TextView) convertView.findViewById(R.id.talk_break_text);
                    holder.breakpoint.setText("BREAKPOINT");

                    holder.breakpoint_icon = (ImageView) convertView.findViewById(R.id.talk_break_image);
                    holder.breakpoint_icon.setImageResource(R.drawable.temp_talkset);

                    convertView.setTag(holder);


                    break;

                case PLAYCUT_LAYOUT: //Playcut


                    convertView = mInflater.inflate(R.layout.listview_cell, null);

                    convertView.findViewById(R.id.boombox).setVisibility(View.GONE);


                    holder.cell_image = (ImageView) convertView.findViewById(R.id.cell_image);

                    try {
                        if(oslist.get(position).get("albumArtUrl")!=null) {
                            Picasso
                                    .with(context)
                                    .load(oslist.get(position).get("albumArtUrl"))
                                    .placeholder(R.drawable.no_album_art)
                                    .error(R.drawable.no_album_art).into(holder.cell_image);
                        }else{
                            Picasso
                                    .with(context)
                                    .load(oslist.get(position).get("artistArtUrl"))
                                    .placeholder(R.drawable.no_album_art)
                                    .error(R.drawable.no_album_art).into(holder.cell_image);
                        }

                    } catch (IllegalArgumentException e) {
                        holder.cell_image.setImageResource(R.drawable.no_album_art);
                    }

                    holder.song = (TextView) convertView.findViewById(R.id.song);
                    holder.artist = (TextView) convertView.findViewById(R.id.artist);

                    holder.song.setText(oslist.get(position).get("songTitle"));
                    holder.artist.setText(oslist.get(position).get("artistName"));

                    convertView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            updateView(position);
                        }
                    });

                    convertView.setTag(holder);
                    break;
                case NULL_LAYOUT:

                    convertView.setTag(holder);
                    break;

            }

        return convertView;

    }

我的 XML

   <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:src="@drawable/boombox"
        android:id="@+id/boombox"
        />

    <!-- Versatile image view storage for either boombox, no album art image, or album art -->

    <ImageView
        android:id="@+id/cell_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        />

    <!-- Divider between image and data -->

    <View
        android:id="@+id/divider"
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@android:color/darker_gray"/>

   <!-- Layout for bottom half of playcut cells -->

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/bottom_layout"
        android:layout_below="@id/divider">

        <!-- Data for Song and Artist -->

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/playcut">

            <TextView
                android:id="@+id/song"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textStyle="bold"
                android:gravity="center"
             />

            <TextView
                android:id="@+id/artist"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/song"
                android:gravity="center"
             />
        </RelativeLayout>

        <!-- Talkset and breakpoint cell data -->

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/talk_break"
            android:paddingLeft="1dp"
            android:paddingTop="1dp"
            android:paddingBottom="1dp">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/talk_break_image"/>

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/talk_break_text"
                android:layout_toRightOf="@id/talk_break_image"/>


        </RelativeLayout>

        <!-- Playcut Cell, clicked, displaying Facebook, Twitter, heart, and search icons -->

        <TableLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:stretchColumns="0,1,2,3,4"
            android:paddingBottom="2dp"
            android:id="@+id/table">

            <TableRow>

                <ImageView
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:id="@+id/twitter_icon"/>

                <ImageView
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:id="@+id/facebook_icon"/>

                <ImageView
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:id="@+id/unclicked_heart_icon"/>

                <ImageView
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:id="@+id/search_icon"/>

            </TableRow>
        </TableLayout>

     </RelativeLayout>

</LinearLayout>

這不起作用的原因是因為您使用的是ViewHolder ,它將維護對所有適配器項的每個 UI 元素的引用。

因此,如果一個元素在第一次迭代中被設置為View.GONE並且不再被觸及,它將保持該狀態,無論它在 XML 中是如何定義的。

要解決此問題,您應該始終根據您使用的布局在getView()明確設置該元素的可見性,因為如果它不是第一次迭代,您將引用 ViewHolder 及其所處的狀態,而不是由 XML 文件膨脹的視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM