【问题标题】:Load Fragment Dynamically with content on RecyclerView.Adapter Item Clicked使用 RecyclerView.Adapter 项目单击的内容动态加载片段
【发布时间】:2019-01-07 18:51:23
【问题描述】:

Android 和 Java 的新手。 单击 RecyclerAdapter 项时,尝试在 Activity/TabLayout 上动态加载带有内容的片段。这是我的bitbucket repo。下面嵌入recyclerview代码。

public class PlacesAdapter extends RecyclerView.Adapter<PlacesAdapter.PlacesViewHolder> {

    private List<Place> mPlaces;

    public PlacesAdapter(List<Place> mPlaces) {
        this.mPlaces = mPlaces;
    }

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

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

        Place place = mPlaces.get(i);

        viewHolder.itemHeading.setText(place.getPlaceTitle());
        viewHolder.itemExcerpt.setText(place.getPlaceExcerpt());
        viewHolder.itemRatings.setText(place.getPlaceRatings());
        viewHolder.itemRatingBar.setRating(Float.parseFloat(place.getPlaceRatings()));
        viewHolder.itemImage.setImageResource(place.getPlaceImage());

//        viewHolder.itemCardVIew.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Toast.makeText(view.getContext(), "Item Clicked " + getItemCount(), Toast.LENGTH_SHORT).show();
//            }
//        });

    }

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

    public class PlacesViewHolder extends RecyclerView.ViewHolder {

        public TextView  itemHeading;
        public TextView  itemExcerpt;
        public ImageView itemImage;
        public TextView  itemRatings;
        public RatingBar itemRatingBar;
        public CardView  itemCardVIew;

        public PlacesViewHolder(@NonNull View itemView) {
            super(itemView);

            itemHeading = itemView.findViewById(R.id.place_item_heading);
            itemExcerpt = itemView.findViewById(R.id.place_item_excerpt);
            itemRatings = itemView.findViewById(R.id.place_item_rating_text);
            itemRatingBar = itemView.findViewById(R.id.place_item_rating_bar);
            itemImage = itemView.findViewById(R.id.place_item_image);
            itemCardVIew = itemView.findViewById(R.id.place_card_view);

            itemCardVIew.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(view.getContext(), "Item Clicked! " + itemHeading.getText(), Toast.LENGTH_SHORT).show();

                    // load fragment
                    AppCompatActivity activity   = (AppCompatActivity) view.getContext();
                    Fragment          myFragment = new Fragment();
                    activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
                }
            });

        }
    }
}

【问题讨论】:

  • 为什么要评论你的onClick代码?
  • @Anmol 我正在尝试不同的东西......所以它只是为了测试

标签: android android-fragments android-recyclerview


【解决方案1】:
viewHolder.itemCardVIew.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             Toast.makeText(view.getContext(), "Item Clicked " + getItemCount(), Toast.LENGTH_SHORT).show();
             FragmentManager manager = ((Activity) context).getFragmentManager();
             FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
             fragmentTransaction.replace(R.id.fragment_container, new YourFragment());
             fragmentTransaction.addToBackStack(null); //depend's on your usecase
             fragmentTransaction.commit();
        }
    });

这应该是您动态启动片段的代码。只需将注释代码替换为它应该可以工作

【讨论】:

  • 感谢 Anmol,getFragmentManager() 显示错误(红色)有什么想法吗?
  • FragmentManager manager = ((Activity) context).getFragmentManager(); 试试这个@CodeLover
  • 感谢一次。现在contenxt 不见了。
  • stackoverflow.com/a/30867467/7972699 只需在适配器的构造函数中传入即可使用
猜你喜欢
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2019-09-02
相关资源
最近更新 更多