RecycleView находится во фрагменте.
У него есть баннер в виде заголовка и списка.
Приложение может работать, но не может загружать изображения и данные элемента.
У него есть только баннерИндикатор и его название img для запуска.
Logcat предупреждает об этом:
18204-18204/newsdaily.annle.com.happyreading_original2018718v0013
W/View: requestLayout() improperly called by
android.view.View{945cd0e V.ED..... ......ID 9336,141-9564,150}
during layout: running second layout pass
package newsdaily.annle.com.**.homepage;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.Transformer;
import com.youth.banner.listener.OnBannerListener;
import com.youth.banner.loader.ImageLoader;
public class ChildFragment extends Fragment {
private HomePagerArticleAdapter homePagerArticleAdapter;
private RecyclerView recycleView;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<HpItemArticle> articleList = new ArrayList<>();
private Banner banner;
private ArrayList<String> titles;
private ArrayList<Integer> images;
private View header;
private View view;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = LayoutInflater.from(getActivity()).inflate(R.layout.homepage_list_fragment, container, false);
Log.i("dfdfff开始", "有没有进入");
initData();
initRecycleView();
return view;
}
private void initData() {
for (int i = 0; i < 15; i++) {
HpItemArticle hpItemArticle = new HpItemArticle(
i,
"数据标题" + i,
"内容究竟是什么,我也不知道,就乱写先吧hhhhhhh" + i,
R.mipmap.ic_launcher);
articleList.add(i, hpItemArticle);
}
images = new ArrayList<>();
images.add(R.drawable.pic0);
images.add(R.drawable.pic1);
images.add(R.drawable.pic2);
titles = new ArrayList<>();
titles.clear();
for (int i = 0; i < images.size(); i++) {
titles.add("第" + i + "张图片");
}
}
private void initRecycleView() {
recycleView = (RecyclerView) view.findViewById(R.id.homepage_rcv_article);
layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recycleView.setLayoutManager(layoutManager);
recycleView.setItemAnimator(new DefaultItemAnimator());
recycleView.setHasFixedSize(true);
initBanner();
homePagerArticleAdapter = new HomePagerArticleAdapter(getContext());
homePagerArticleAdapter.setmHeaderView(header);
homePagerArticleAdapter.addListData(articleList);
homePagerArticleAdapter.notifyDataSetChanged();
recycleView.setAdapter(homePagerArticleAdapter);
layoutManager.setItemPrefetchEnabled(false);
}
private void initBanner() {
header = LayoutInflater.from(view.getContext()).inflate(R.layout.homepage_news_header, null);
banner = (Banner) header.findViewById(R.id.banner);
//设置图片加载器
banner.setImageLoader(new FragmentImageLoader());
banner.setImages(images);
banner.setBannerTitles(titles);
banner.isAutoPlay(true);
//设置轮播时间
banner.setDelayTime(1500);
banner.start();
banner.setOnBannerListener(new OnBannerListener() {
@Override
public void OnBannerClick(int position) {
Log.i("---184--", "第" + position + "张轮播图点击了!");
}
});
}
private class FragmentImageLoader extends ImageLoader {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(getActivity()).load(path).into(imageView);
}
}
}
package newsdaily.annle.com.**.adapter;
/**
* 首页新闻列表适配器,头部banner,下面文章列表
* Created by 11581 on 2018/9/28.
*/
public class HomePagerArticleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private View homepageHeadView;
te ArrayList<HpItemArticle> listData = new ArrayList<>();
private LayoutInflater mLayoutInflater;
private OnItemClickListener itemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
itemClickListener = onItemClickListener;
}
public View getmHeaderView() {
return homepageHeadView;
}
public void setmHeaderView(View headerview) {
homepageHeadView = headerview;
notifyItemInserted(0);//插入下标0位置
}
public int getTypeItem(int position) {
if (homepageHeadView == null) return TYPE_ITEM;
if (position == 0) return TYPE_HEADER;
return TYPE_ITEM;
}
public HomePagerArticleAdapter(Context context) {
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (homepageHeadView != null && viewType == TYPE_HEADER)
return new ItemArticleViewHolder(homepageHeadView);
View view =
LayoutInflater.from(parent.getContext()).inflate(R.layout.homepage_news_item, parent, false);
return new ItemArticleViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if (getItemViewType(position) == TYPE_HEADER) return;
final int pos = getPosition(holder);
final HpItemArticle data = listData.get(pos);
if (holder instanceof ItemArticleViewHolder) {
//转型为了便捷
ItemArticleViewHolder newHolder = (ItemArticleViewHolder) holder;
newHolder.hpItemArticleTitle.setText(data.getTitle());
newHolder.hpItemArticleImage.setImageResource(data.getImages());
newHolder.hpItemArticleImage.setImageResource(data.getImages());
if (itemClickListener == null) return;
((ItemArticleViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick(position, listData.get(position).getTitle());
}
});
}
}
@Override
public int getItemCount() {
return homepageHeadView == null ? listData.size() : listData.size() + 1;
}
public int getPosition(RecyclerView.ViewHolder holder) {
int position = holder.getLayoutPosition();
return homepageHeadView == null ? position : position - 1;
}
@Override
public long getItemId(int position) {
return position;
}
public void addListData(ArrayList<HpItemArticle> datas) {
if (datas != null) {
listData.clear();
}
listData.addAll(datas);
notifyDataSetChanged();
}
public class ItemArticleViewHolder extends RecyclerView.ViewHolder {
ImageView hpItemArticleImage;
TextView hpItemArticleTitle;
TextView hpItemArticleDetails;
public ItemArticleViewHolder(View itemView) {
super(itemView);
if (itemView == homepageHeadView) return;
hpItemArticleImage = (ImageView) itemView.findViewById(R.id.hp_item_article_image);
hpItemArticleDetails = (TextView) itemView.findViewById(R.id.hp_item_article_details);
hpItemArticleTitle = (TextView) itemView.findViewById(R.id.hp_item_article_title);
ButterKnife.bind(this, itemView);
}
}
public interface OnItemClickListener {
void onItemClick(int position, String data);
}
}
Мой английский не очень хороший. Заранее спасибо.
banner.xml.заголовок RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
xmlns:android="http://schemas.android.com/apk/res/android" />
Макет элемента RecyclerView.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/hp_item_article_image"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
app:srcCompat="@mipmap/ic_launcher_round" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/hp_item_article_image"
android:orientation="vertical">
<TextView
android:id="@+id/hp_item_article_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="@string/homepage_article_title"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/hp_item_article_details"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:text="@string/homepage_article_details" />
</LinearLayout>
</RelativeLayout>