RecyclerVIew不会在NestedScrollView中回收包含图像和文本的CardView

时间:2017-01-26 09:35:04

标签: android android-recyclerview android-nestedscrollview

我在nestedScrolView中使用3个recyclerView,前两个是GridView,第三个是LinearLayout。 现在,当我滚动浏览几个项目时,第三个回收站视图显示了滞后行为,我有一种预感,即项目不会被回收。 我认为它也影响(滞后行为)我的导航抽屉(打开和关闭) 以下是我的代码

 @Override
    protected void onPostExecute(Void aVoid) {

        progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
        recyclerView = (RecyclerView) view.findViewById(R.id.feeds_recyclerView);
        recyclerView.setNestedScrollingEnabled(false);
        mLayoutManager = new LinearLayoutManager(getContext());
        load = new FeedAdapter(getActivity(), worldpopulationlist);
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setHasFixedSize(true);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(load);
        progressBar.setVisibility(View.GONE);
        viewMore.setVisibility(View.VISIBLE);

        viewMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new LoadMoreDataTask().execute();
            }
        });

    }  

NestedScrollView XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="@color/turquoise"
            app:layout_scrollFlags="scroll|snap|exitUntilCollapsed"
            app:scrimVisibleHeightTrigger="180dp">


            <android.support.v4.view.ViewPager
                android:id="@+id/viewPager"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_marginTop="?attr/actionBarSize"
                app:layout_collapseMode="parallax" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/turquoise"
                app:layout_collapseMode="pin" />


        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/light_grey"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <FrameLayout
                android:id="@+id/mainContainer"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

            </FrameLayout>

            <FrameLayout
                android:id="@+id/mainContainer2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp">

            </FrameLayout>

            <FrameLayout
                android:id="@+id/mainContainer3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp">

            </FrameLayout>

        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>  

膨胀的单行Xml

<FrameLayout 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="match_parent"
tools:context="Fragment.Feeds">


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/feeds"
        android:textColor="@color/turquoise"
        android:textSize="20sp"
        android:textStyle="bold" />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="0.5dp"
        android:background="@color/grey" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/feeds_recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">


    </android.support.v7.widget.RecyclerView>

    <TextView
        android:id="@+id/view_more"
        style="@style/Base.TextAppearance.AppCompat.Large"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:text="View More"
        android:textColor="@color/turquoise" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="@style/Widget.AppCompat.ProgressBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

第三个适配器

public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.MyViewHolder> {

View itemView;
private View nativeExpressLayoutView;
private View itemView1;
private Context context;
private List<WorldPopulation> worldpopulationlist = null;
private WorldPopulation movie;
private int x;

private AdRequest adRequest = new AdRequest.Builder()
        .build();


public FeedAdapter(FragmentActivity feeds, List<WorldPopulation> worldpopulationlist) {

    this.context = feeds;
    this.worldpopulationlist = worldpopulationlist;
    ArrayList<WorldPopulation> arraylist = new ArrayList<>();
    arraylist.addAll(worldpopulationlist);
}

@Override
public int getItemViewType(int position) {
    movie = worldpopulationlist.get(position);
    if (movie.getAds() == 1) {
        return 1;
    } else if (movie.getAds()==0){
        return 0;
    } else if(movie.getAds()==2){
        return 2 ;
    }
return 1;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    switch (viewType) {
        case 1:

            itemView1 = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.feeds_adv_single_row, parent, false);

            return new MyViewHolder(itemView1);

        case 0:

            itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.feeds_single_row, parent, false);

            return new MyViewHolder(itemView);

        case 2:

             nativeExpressLayoutView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.ad_view_type, parent, false);

            return new MyViewHolder(nativeExpressLayoutView);


    }
    return null;
}

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    movie = worldpopulationlist.get(holder.getAdapterPosition());

    if (holder.mview == itemView1) {

        holder.brandImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent x = new Intent(context, Full_Image.class);
                x.putExtra("image",worldpopulationlist.get(position).getBrand_Image());
                context.startActivity(x);
            }
        });

        holder.mview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(context, AdsActivity.class);

                intent.putExtra("adsNext", worldpopulationlist.get(position).getAdsSecond());

                intent.putExtra("objId", worldpopulationlist.get(position).getObjectId());

                intent.putExtra("brandImage", worldpopulationlist.get(position).getBrand_Image());

                intent.putExtra("brandName", worldpopulationlist.get(position).getAuthor_Name());

                intent.putExtra("link", worldpopulationlist.get(position).getLink());

                intent.putExtra("mobNo", worldpopulationlist.get(position).getCall());

                intent.putExtra("brandDescription", worldpopulationlist.get(position).getPages());

                intent.putExtra("brandDescriptionText", worldpopulationlist.get(position).getPage_No());

                intent.putExtra("contactUs", worldpopulationlist.get(position).getContactUs());

                intent.putExtra("aboutUs", worldpopulationlist.get(position).getAboutUs());


                context.startActivity(intent);
            }
        });

    } else if (holder.mview == itemView) {


        holder.mview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                Intent intent = new Intent(context, Feeds_Second.class);

                intent.putExtra("rank", worldpopulationlist.get(position).getImagesContent());

                intent.putExtra("image", worldpopulationlist.get(position).getFlag());

                intent.putExtra("ads", worldpopulationlist.get(position).getAds());

                intent.putExtra("call", worldpopulationlist.get(position).getCall());

                intent.putExtra("objectId", worldpopulationlist.get(position).getObjectId());

                intent.putExtra("contactUs", worldpopulationlist.get(position).getContactUs());

                intent.putExtra("aboutUs", worldpopulationlist.get(position).getAboutUs());

                intent.putExtra("switch", worldpopulationlist.get(position).getSwitches());

                intent.putExtra("link", worldpopulationlist.get(position).getLink());

                intent.putExtra("clicks", worldpopulationlist.get(position).getClicks());

                context.startActivity(intent);
            }
        });

    }

    x = movie.getAds();


    if (x == 1) {
        holder.brandName.setText(movie.getAuthor_Name());
        holder.brandDescription.setText(movie.getPages());  // when setting brandDescription to the objectId it shows objectId ysZicAeoRU
        holder.brandDescriptionText.setText(movie.getPage_No());

        Picasso.with(context)
                .load(worldpopulationlist.get(position).getBrand_Image())
                .placeholder(R.drawable.place_holder)
                .error(R.drawable.broken_image)
                .into(holder.brandImage);

        Picasso.with(context)
                .load(worldpopulationlist.get(position).getFlag())
                .placeholder(R.drawable.place_holder)
                .error(R.drawable.broken_image)
                .into(holder.brandMainImage);


    } else if (x==0){

        holder.imageContent.setText(movie.getImagesContent());
        holder.userName.setText(movie.getAddress());
        holder.author.setText(movie.getAuthor());
        holder.authorName.setText(movie.getAuthor_Name());
        holder.pages.setText(movie.getPages());
        holder.pageNo.setText(String.valueOf(movie.getClicks()));

        holder.userImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent y = new Intent(context, WrapImage.class);
                y.putExtra("image",worldpopulationlist.get(position).getUserImage());
                context.startActivity(y);
            }
        });

        Picasso.with(context)
                .load(worldpopulationlist.get(position).getUserImage())
                .placeholder(R.drawable.place_holder)
                .error(R.drawable.broken_image)
                .into(holder.userImage);

        Picasso.with(context)
                .load(worldpopulationlist.get(position).getFlag())
                .placeholder(R.drawable.place_holder)
                .error(R.drawable.broken_image)
                .into(holder.feedsImage);
    } else if (x ==2){

        holder.adView.loadAd(adRequest);
    }
}

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

public class MyViewHolder extends RecyclerView.ViewHolder {

    TextView imageContent, userName, author, authorName, pages, pageNo;
    TextView brandName, brandDescription, brandDescriptionText;
    ImageView feedsImage, brandImage, brandMainImage, userImage;
    View mview;
    AdView adView;

    public MyViewHolder(View v) {
        super(v);
        mview = v;

        imageContent = (TextView) v.findViewById(R.id.recycler_text);
        feedsImage = (ImageView) v.findViewById(R.id.flag);
        userImage = (ImageView) v.findViewById(R.id.userImage);
        userName = (TextView) v.findViewById(R.id.userName);

        author = (TextView) v.findViewById(R.id.author);
        authorName = (TextView) v.findViewById(R.id.author_name);
        pages = (TextView) v.findViewById(R.id.pages);
        pageNo = (TextView) v.findViewById(R.id.page_no);

        brandName = (TextView) v.findViewById(R.id.brand_name);
        brandDescription = (TextView) v.findViewById(R.id.author_brand_description);
        brandDescriptionText = (TextView) v.findViewById(R.id.author_name_brand_description);
        brandImage = (ImageView) v.findViewById(R.id.brand_image);
        brandMainImage = (ImageView) v.findViewById(R.id.brand_main_image);

        adView = (AdView)v. findViewById(R.id.adView);

    }
}

}

0 个答案:

没有答案
相关问题