RecyclerView не может загрузить изображение баннера и список данных - PullRequest
0 голосов
/ 03 октября 2018

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...