0

を台無しに。 Heterogeneous Layoutsリサイクラービューをスクロールした部分がすべて正常に動作していますが、レイアウトが正しく表示されません。私は2つのレイアウトを持っています、1つはテキストを持っていて、他のものは画像を持っています、スクロールするにはテキストセクションに空白がたくさん残っています。 私はリンクをオンラインでチェックしましたが、何も問題を解決しませんでした。あなたの助けが必要であり、感謝しています。
は、ここで私はリサイクルビューにアダプターを結合していますどのようにこれは私のコードリサイクラービュースクロールは、私がこのチュートリアル以下、異種リサイクラービューをしようとしています

ComplexRecyclerViewAdapter

public class ComplexRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
private List<Object> items; 
private final int STATUS = 0, IMAGE_STATUS = 1; 
public ComplexRecyclerViewAdapter(List<Object> items) { 
    this.items = items; 
} 
@Override 
public int getItemCount() { 
    return this.items.size(); 
} 
@Override 
public int getItemViewType(int position) { 
    if (items.get(position) instanceof ArrayFeedItem) { 
     return STATUS; 
    } else if (items.get(position) instanceof ArrayFeedItemWithImage) { 
     return IMAGE_STATUS; 
    } 
    return -1; 
} 
@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 

    RecyclerView.ViewHolder viewHolder; 
    LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); 

    if (viewType == STATUS){ 
     View v1 = inflater.inflate(R.layout.layout_viewholder1, viewGroup, false); 
     viewHolder = new ViewHolder1(v1); 
    } 
    else if(viewType ==IMAGE_STATUS){ 
     View v2 = inflater.inflate(R.layout.layout_viewholder2, viewGroup, false); 
     viewHolder = new ViewHolder2(v2); 
    } 
    else 
    viewHolder=null; 
    return viewHolder; 
} 
@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { 

    if (viewHolder.getItemViewType() == STATUS) 
    { 
     ViewHolder1 vh1 = (ViewHolder1) viewHolder; 
     configureViewHolder1(vh1, position); 
     vh1.setIsRecyclable(false); 
    } 
    else 
    { 
     ViewHolder2 vh2 = (ViewHolder2) viewHolder; 
     configureViewHolder2(vh2, position); 
     vh2.setIsRecyclable(false); 
    } 
} 
private void configureViewHolder1(ViewHolder1 vh1, int position) { 
    ArrayFeedItem item = (ArrayFeedItem) items.get(position); 
    if (item != null) { 
     vh1.getHolderImage().setImageResource(item.img); 
     vh1.getHolderText().setText(item.txtname); 
     vh1.getStatusMsg().setText(item.StatusMsg); 
     vh1.getTimestamp().setText(item.Timestamp); 
     vh1.getUrl().setText(item.URL); 
    } 
} 

private void configureViewHolder2(ViewHolder2 vh2, int position) { 
    ArrayFeedItemWithImage item = (ArrayFeedItemWithImage) items.get(position); 
    if (item != null) { 
     vh2.getHolderImage().setImageResource(item.img); 
     vh2.getHolderText().setText(item.txtname); 
     vh2.getStatusMsg().setText(item.StatusMsg); 
     vh2.getTimestamp().setText(item.Timestamp); 
     vh2.getUrl().setText(item.URL); 
     vh2.getFeedImage().setImageResource(item.feedImage1); 
    } 
} 
} 

です。

ホーム活動

list=(RecyclerView) findViewById(R.id.list); 
adapter =new ComplexRecyclerViewAdapter(items); 
list.setNestedScrollingEnabled(false); 
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
list.setLayoutManager(mLayoutManager); 
list.setItemAnimator(new DefaultItemAnimator()); 
list.setAdapter(adapter); 

ViewHolder1

public class ViewHolder1 extends RecyclerView.ViewHolder { 
private ImageView Image; 
private TextView Text,Timestamp,StatusMsg,Url; 
public ViewHolder1(View itemView) { 
    super(itemView); 
    Image=(ImageView) itemView.findViewById(R.id.img); 
    Text=(TextView)itemView.findViewById(R.id.txt); 
    Timestamp=(TextView)itemView.findViewById(R.id.timestamp); 
    StatusMsg=(TextView)itemView.findViewById(R.id.txtStatusMsg); 
    Url=(TextView)itemView.findViewById(R.id.txtUrl); 

} 
public ImageView getHolderImage() { 
    return Image; 
} 

public void setHolderImage(ImageView image) { 
    this.Image = image; 
} 
public TextView getHolderText() { 
    return Text; 
} 

public void setHolderText(TextView text) { 
    this.Text = text; 
} 
public TextView getTimestamp() { 
    return Timestamp; 
} 

public void setTimestamp(TextView timestamp) { 
    this.Timestamp = timestamp; 
} 
public TextView getStatusMsg() { 
    return StatusMsg; 
} 

public void setStatusMsg(TextView statusmsg) { 
    this.StatusMsg = statusmsg; 
} 
public TextView getUrl() { 
    return Url; 
} 

public void setUrl(TextView url) { 
    this.Url = url; 
} 

} 

layout_viewholder1

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/feed_bg" 
android:orientation="vertical" > 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginLeft="@dimen/feed_item_margin" 
    android:layout_marginRight="@dimen/feed_item_margin" 
    android:layout_marginTop="@dimen/feed_item_margin" 
    android:background="@drawable/bg_parent_rounded_corner" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/feed_item_padding_top_bottom" 
    android:paddingTop="@dimen/feed_item_padding_top_bottom" 
    android:id="@+id/layout1" 
    > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:paddingLeft="@dimen/feed_item_padding_left_right" 
     android:paddingRight="@dimen/feed_item_padding_left_right" > 

     <ImageView 
      android:id="@+id/img" 
      android:layout_width="@dimen/feed_item_profile_pic" 
      android:layout_height="@dimen/feed_item_profile_pic" 
      android:scaleType="fitCenter" > 
     </ImageView> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:paddingLeft="@dimen/feed_item_profile_info_padd" > 

      <TextView 
       android:id="@+id/txt" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textSize="@dimen/feed_item_profile_name" 
       android:textStyle="bold" 
       android:textColor="@color/black"/> 

      <TextView 
       android:id="@+id/timestamp" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textColor="@color/timestamp" 
       android:textSize="@dimen/feed_item_timestamp" 
       /> 
     </LinearLayout> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/txtStatusMsg" 
     android:textColor="@color/black" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="5dp" 
     android:paddingLeft="@dimen/feed_item_status_pad_left_right" 
     android:paddingRight="@dimen/feed_item_status_pad_left_right" 
     android:paddingTop="@dimen/feed_item_status_pad_top" /> 

    <TextView 
     android:id="@+id/txtUrl" 
     android:textColor="@color/black" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:linksClickable="true" 
     android:paddingBottom="10dp" 
     android:paddingLeft="@dimen/feed_item_status_pad_left_right" 
     android:paddingRight="@dimen/feed_item_status_pad_left_right" 
     android:textColorLink="@color/link" /> 
</LinearLayout> 

</LinearLayout> 

おかげで私n進める。

+0

あなた 'ViewHolder1'と' ViewHolder2'コードと行のかもしれないのxmlのを投稿してください。 –

+0

'setIsRecyclable(false)'が必要ですか?そしてあなたは、この 'this.items =アイテムを持っている;'二回R.ZagórskiViewHolder1とViewHolder2はかなり似ています@問題 – Raghunandan

+0

の原因ではないコンストラクタで、単に画像ビューはViewHolder2で追加です。スペースと時間を節約して、ViewHolder1のXMLとコードを投稿しましたが、そこに問題はないと思います。 :) –

答えて

0

は、この点に注意をしてください払います!

アプリケーションが何らかの理由で項目を削除する必要があり、良くないfalseにそうsetISRecyclable recyclerviewに削除した項目のプロセスを見たい場合は、それをチェック!私はメッセージを持っています:

トグルのようなものが必要な場合は、あなたのアダプタのonBindViewHolderでこの点を考慮してくださいonBindViewHolderを呼び出すたびに、load()呼び出しまたはclear()呼び出しが含まれている必要があります。

たとえば、RecyclerViewアイテムレイアウトの一部を設定するためのブール値または0-1をチェックすると、If-Statementブロックで両方を考慮する必要があります。この質問では例えば

私はそう項目は多分起こる台無しconfigureViewHolder2と1の内側に他のブロックを参照してください傾けます。

患者読者を読むことTNX

関連する問題