1

我想在一個回收站視圖中充氣兩種不同的佈局。這是我的適配器代碼。Android在回收站視圖適配器中充氣兩種佈局

import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
private ArrayList<myHome> homeData; 
private static final int TYPE_FEATURED = 1; 
private static final int TYPE_OTHER = 2; 

public HomeAdapter(ArrayList<myHome> myDataset) { 
    this.homeData = myDataset; 
} 

public class FeaturedViewHolder extends RecyclerView.ViewHolder { 
    public TextView title; 
    public TextView author; 

    public FeaturedViewHolder(View itemView) { 
     super(itemView); 
     this.title = (TextView)itemView.findViewById(R.id.title); 
     this.author = (TextView)itemView.findViewById(R.id.recvid_auth); 

    } 
} 

public class otherVidViewHolder extends RecyclerView.ViewHolder { 
    public TextView rec_title; 
    public TextView rec_author; 

    public otherVidViewHolder(View itemView) { 
     super(itemView); 
     this.rec_title = (TextView)itemView.findViewById(R.id.recvid_title); 
     this.rec_author = (TextView)itemView.findViewById(R.id.description); 
    } 
} 

@Override 
public int getItemViewType(int position) { 
    // Just as an example, return 0 or 2 depending on position 
    // Note that unlike in ListView adapters, types don't have to be contiguous 
    return (position == 0? TYPE_FEATURED : TYPE_OTHER); 
} 


@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    RecyclerView.ViewHolder viewHolder; 
    LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); 

    switch (viewType) { 
     case TYPE_FEATURED : 
      View v1 = inflater.inflate(R.layout.layout_home_view, viewGroup, false); 
      viewHolder = new FeaturedViewHolder(v1); 
      //return new FeaturedViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_home_view, viewGroup, false)); 
      break; 
     case TYPE_OTHER : 
      View v2 = inflater.inflate(R.layout.layout_home_other, viewGroup, false); 
      viewHolder = new otherVidViewHolder(v2); 
      //return new otherVidViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_home_other, viewGroup, false)); 
      break; 
     default: return null; 
    } 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { 

     if(viewHolder.getItemViewType() == TYPE_FEATURED) { 
      FeaturedViewHolder featuredViewHolder = (FeaturedViewHolder) viewHolder; 
      featuredViewHolder.title.setText(homeData.get(i).getTitle()); 
      featuredViewHolder.author.setText(homeData.get(i).getUser()); 
     } else { 
      otherVidViewHolder otherViewHolder = (otherVidViewHolder) viewHolder; 
      otherViewHolder.rec_title.setText(homeData.get(i).getViews()); 
     } 
} 

@Override 
public int getItemCount() { 
    return homeData.size(); 
} 

該代碼運行正常,但它只顯示一個佈局,其他佈局是layout_home_other未顯示。可以顯示兩種佈局嗎?這兩個佈局也有不同的數據顯示。我將如何重新調整getItemCount()中的第二個佈局的大小?感謝你的幫助,我會得到。

這裏是數據集。 公共類MYHOME {

String title; 
String user; 
String views; 
String url; 
String duration; 

public myHome(String title, String user, String views, String url, String duration) { 
    this.title = title; 
    this.user = user; 
    this.views = views; 
    this.url = url; 
    this.duration = duration; 
} 

public String getTitle() { 
    return title; 
} 

public String getUser() { 
    return user; 
} 

public String getViews() { 
    return views; 
} 

public String getUrl() { 
    return url; 
} 

public String getDuration() { 
    return duration; 
} 

} 
+0

嘗試增加根佈局爲您的佈局,那麼它充氣單佈局 –

+0

@akhilRao我在哪裏增加嗎?在onCreateViewHolder?以及如何添加它?即時通訊對不起,我在android編程新手。 – kathleen55

+0

你是否試圖在同一時間膨脹兩種不同的佈局?或者你是否試圖根據數據情況膨脹兩種不同的佈局(一次一個)? – Silmarilos

回答

2
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    // CONSTRUCTOR 
    public RecyclerViewAdapter(Context context,"OTHER PARAMETERS) { 
    this.context = context; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view ; 
    switch (viewType){ 
     case -1: 
      view = inflater.inflate(R.layout.LAYOUTONE, null, false); 
      return new ExpiredViewHolder(view); 
     case 0: 
      view = inflater.inflate(R.layout.LAYOUTTWO, null, false); 
      return new ActiveViewHolder(view); 
    } 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    if (holder instanceof ExpiredViewHolder) { 
     ((ExpiredViewHolder) holder).bind(tickerList.get(position)); 
    } else { 
     if (holder instanceof ActiveViewHolder) { 
      ((ActiveViewHolder) holder).bind(tickerList.get(position)); 
     } 
     else { 
      ((FutureViewHolder) holder).bind(tickerList.get(position)); 
     } 
    } 
    } 

    @Override 
    public int getItemViewType(int position) { 
    return List.get(position).status; 
    } 

    @Override 
    public int getItemCount() { 
    return List.size(); 
    } 

    static class ActiveViewHolder extends RecyclerView.ViewHolder { 
    //Your layout components 
    public ActiveViewHolder(View view) { 
     super(view); 
     //Instantiate you layout components fromyout view 
    } 

    public void bind(Params) { 
     //PUT TEXT TO YOUR FIELDS OR COMPONENTS 
    } 
    } 

    class ExpiredViewHolder extends RecyclerView.ViewHolder { 
    public ExpiredViewHolder(View view) { 
     super(view); 
    } 
    public void bind(Params) { 
    } 
    } 

    static class FutureViewHolder extends RecyclerView.ViewHolder { 
    public FutureViewHolder(View view) { 
     super(view); 
    } 

    public void bind(Params) { 
    } 
    } 
} 

public class MainClass{ 

    RecyclerView mRecyclerView ; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 


     mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     adapter = new RecyclerViewAdapter(getActivity(), arrayTicker); 
     mRecyclerView.setAdapter(adapter); 
     return view; 
    } 

} 
+2

請添加更多的細節/內容,因爲這會使答案對未來的讀者更有用。 – EJoshuaS

相關問題