簡體   English   中英

在RecyclerView中的viewPager中不顯示圖像

[英]Not Show The Images In viewPager in RecyclerView

我想在回收單元格中顯示一組圖像。 在ViewHolder中,我創建了ViewPager的瞬間。 在onBindViewHolder中,我設置了ViewPager的適配器。 但是沒有顯示圖像。 請有人提出一些解決方案,以便我可以解決這個問題。 我正在發送我的代碼。

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private ArrayList<AndroidVersion> android_versions;
private Context context;

public DataAdapter(Context context,ArrayList<AndroidVersion> android_versions) {
    this.context = context;
    this.android_versions = android_versions;

}

@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_layout, viewGroup, false);
    return new ViewHolder(view);
}

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

    viewHolder.tv_android.setText(android_versions.get(i).getAndroid_version_name());
    viewHolder.img_android.setImageResource(R.drawable.image1);
    int images[] = {R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4};
    MyCustomPagerAdapter myCustomPagerAdapter = new MyCustomPagerAdapter(this.context, images);
    viewHolder.viewPager.setAdapter(myCustomPagerAdapter);

}

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

public class ViewHolder extends RecyclerView.ViewHolder{
    TextView tv_android;
    ImageView img_android;
    ViewPager viewPager;

    public ViewHolder(View view) {
        super(view);

        tv_android = (TextView)view.findViewById(R.id.tv_android);
        img_android = (ImageView)view.findViewById(R.id.img_android);
        viewPager = (ViewPager) view.findViewById(R.id.viewPager);
    }
}

}

====== onCreate內部的MainActivity ===========

    RecyclerView recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view);
    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(layoutManager);

    ArrayList androidVersions = prepareData();
    DataAdapter adapter = new DataAdapter(getApplicationContext(),androidVersions);
    recyclerView.setAdapter(adapter);

    private ArrayList prepareData(){

    ArrayList android_version = new ArrayList<>();
    for(int i=0;i<android_version_names.length;i++){
        AndroidVersion androidVersion = new AndroidVersion();
        androidVersion.setAndroid_version_name(android_version_names[i]);
        androidVersion.setAndroid_image_url(android_image_urls[i]);
        android_version.add(androidVersion);
    }
    return android_version;
}

您可以根據需要更改此代碼,我將按照步驟逐步提供代碼..使適配器將片段添加到viewpager中。

 public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> mFragmentList = new ArrayList<>();
    private List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        mFragmentList = null;
        mFragmentTitleList = null;
        container.removeAllViews();
        super.destroyItem(container, position, object);
    }
}

public void opendSearchFriendFragment() {
    FragmentController.addSearchFriendFragment(getActivity());
}

}

然后在制作片段以顯示viewpager並將片段添加到適配器中,然后將適配器添加到viewpager中。

public class FollowersFragment extends Fragment {


private TabLayout mTbFollowers;
private ViewPager mVPFollowers;
private ViewPagerAdapter adapter;


public static FollowersFragment newInstance() {
    return new FollowersFragment();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.followers_fragment, container, false);
    initViews(root);
    return root;
}



private void initViews(View root) {
    mTbFollowers = (TabLayout) root.findViewById(R.id.ffTbFollower);
    mVPFollowers = (ViewPager) root.findViewById(R.id.ffVpFollowers);
    setupViewPager(mVPFollowers);
    mTbFollowers.post(new Runnable() {
        @Override
        public void run() {
            mTbFollowers.setupWithViewPager(mVPFollowers);
        }
    });

    mTbFollowers.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab p_tab) {

        }

        @Override
        public void onTabUnselected(TabLayout.Tab p_tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab p_tab) {

        }
    });

    mVPFollowers.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTbFollowers));

    mVPFollowers.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            Fragment mFragment = adapter.getItem(position);

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}


private void setupViewPager(ViewPager viewPager) {
    adapter = new ViewPagerAdapter(getChildFragmentManager());
    adapter.addFragment(FollowerListFragment.newInstance(Constants.FOLLOWERS), Constants.FOLLOWERS);
    adapter.addFragment(FollowerListFragment.newInstance(Constants.FOLLOWING), Constants.FOLLOWING);
    viewPager.setAdapter(adapter);
    viewPager.setOffscreenPageLimit(1);

}

}

然后在制作如下所示的回收站視圖適配器后..

public class FollowersAdapter extends RecyclerView.Adapter<FollowersAdapter.ItemViewHolder> {

private List<UserData> mFollowersList = new ArrayList<UserData>();

private Context context;
private LayoutInflater layoutInflater;
private String mSelectedTab;

public FollowersAdapter(Context context, List<UserData> mFollowersList, String mSelectedTab) {
    this.context = context;
    this.mFollowersList = mFollowersList;
    this.mSelectedTab = mSelectedTab;
    this.layoutInflater = LayoutInflater.from(context);
}

public interface OnRecyclerItemClickListener {

    void onViewItemClicked(UserData userData);

}

OnRecyclerItemClickListener onRecyclerItemClickListener;

public void setOnRecyclerItemListener(OnRecyclerItemClickListener _onRecyclerItemClickListener) {
    this.onRecyclerItemClickListener = _onRecyclerItemClickListener;
}

@Override
public int getItemCount() {
    return (null != mFollowersList ? mFollowersList.size() : 0);
}

@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.follower_row_layout, parent, false);
    return new ItemViewHolder(v);
}

@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    final UserData userData = mFollowersList.get(position);

    if (mSelectedTab.equals(Constants.FOLLOWERS) && userData.isFollower()) {
        holder.itemView.setVisibility(View.VISIBLE);
    } else if (mSelectedTab.equals(Constants.FOLLOWING) && !userData.isFollower()) {
        holder.itemView.setVisibility(View.VISIBLE);
    } else {
        holder.itemView.setVisibility(View.GONE);
    }

    holder.mTvFollowerName.setText(userData.getUserName());

    Glide.with(context)
            .load(userData.getProfilePicPath())
            .dontAnimate()
            .placeholder(ContextCompat.getDrawable(context, R.drawable.placeholder01))
            .error(ContextCompat.getDrawable(context, R.drawable.placeholder01))
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(holder.mIvFollowerImage);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (onRecyclerItemClickListener != null)
                onRecyclerItemClickListener.onViewItemClicked(userData);
        }
    });

}

class ItemViewHolder extends RecyclerView.ViewHolder {
    private ImageView mIvFollowerImage;
    private TextView mTvFollowerName;

    public ItemViewHolder(View view) {
        super(view);
        mTvFollowerName = (TextView) view.findViewById(R.id.frlTvFollowerName);
        mIvFollowerImage = (ImageView) view.findViewById(R.id.frlIvFollowersImage);
    }
}

}

然后將該適配器實現為片段類,然后將其添加到如下所示的視圖分頁器中..將回收器視圖和其他內容定義為片段,然后對以下適配器方法進行一些更改。

 private void setAdapter(ArrayList<UserData> userDataArrayList) {
    if (followersAdapter == null) {
        if (!userDataArrayList.isEmpty()) {
            mTvEmpty.setVisibility(View.GONE);
            followersAdapter = new FollowersAdapter(getActivity(), userDataArrayList, mSelectedTab);
            mRvFollowers.setAdapter(followersAdapter);

            followersAdapter.setOnRecyclerItemListener(new FollowersAdapter.OnRecyclerItemClickListener() {
                @Override
                public void onViewItemClicked(UserData userData) {
                    FragmentController.addOtherUserProfileFragment(getActivity(), mUserId, "" + userData.getUserID());
                }
            });

        } else {
            mTvEmpty.setVisibility(View.VISIBLE);
        }

    } else {
        followersAdapter.notifyItemRangeChanged(0, userDataArrayList.size());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM