2015-06-19 44 views
2

VisiIn我的自定義適配器getView方法,我有不同類型的佈局單元格的開關情況。我指的是這些細胞和顯示/一個佈局XML隱藏的setVisibility(查看....)某些元素在我的第一個單元格,「StreamLayout,」首先我要表明的是一個ImageView的「內置揚聲器」。我在所有其他佈局中將此圖像視圖設置爲不可見,但是當我這樣做時,它不會顯示在第一個佈局中。我會提供我的getView方法和我的佈局XML:當我設置一些項目在getView到view.invisible(),別人不出現

getView:

@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> 
+0

我對這個例子非常困惑,我看到你把所有的東西都設置爲'View.GONE',爲什麼? – AdamMc331

+0

對不起對不起,我改變了它 –

回答

1

這不工作的原因是因爲您使用的是ViewHolder這將保持對所有適配器項目的每個UI元素的引用。因此,如果元素在第一次迭代中被設置爲View.GONE並且不再被觸摸,則它將保持該狀態,而不管它在XML中如何定義。

要解決這個問題,您應該始終明確地設置getView()中該元素的可見性,具體取決於您使用的佈局,因爲如果它只是第一次迭代,您將引用ViewHolder以及它所處的狀態,而不是XML文件誇大的觀點。

+0

我設置R.id.boombox到view.Visible並沒有什麼改變 –

+2

你應該誇大你的觀點僅** **當你得到一個空* convertView *。 – Blackbelt

+1

@TeddyWilson在所有的例子你就儘可能我可以看到設置爲'View.GONE'。你期望它能被看到的佈局是什麼? – AdamMc331

相關問題