簡體   English   中英

從ApI打開Fragment OnClick on Recyclerview項目

[英]Open Fragment OnClick on Recyclerview item from ApI

我正在使用AQuery在recycleview中從API獲取數據,但是現在我想從API onclick上打開recyclerview項目的片段,那么我該如何實現這一點。 我想做與Instagram應用程序相同的操作,就像在主頁上單擊名稱時一樣,在另一個片段上獲取用戶的所有詳細信息。

//CouponFragment.java
public class CouponFragment extends Fragment implements CouponList.OnActionCompleted{
    private RecyclerView recyclerView;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        recyclerView = new RecyclerView(getActivity());
        return recyclerView;
    }
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ArrayList<String> coupons = new ArrayList<>();
        coupons.add("Tamil");
        coupons.add("English");
        coupons.add("Malay");
        coupons.add("Chinese");
        recyclerView.setAdapter(new CouponList(coupons,CouponFragment.this));
    }
    @Override
    public void OnClick(Coupon coupon){
        //new fragment
        CouponDetails couponDetails  = new CouponDetails();
        FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.home_container, couponDetails);
        //R.id.home_container  is your FrameLayout id
        transaction.addToBackStack("couponDetails");
        transaction.commit();
    }
}

cardview_coupon_info.xml

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/tools"
    android:foreground="?android:attr/selectableItemBackground"
    android:transitionName="coupon_info_card"
    android:id="@+id/coupon_info_card"
    android:clickable="true"
    android:layout_margin="@dimen/item_margin"
    card_view:cardElevation="6dp"
    card_view:cardCornerRadius="4dp">

    <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:id="@+id/coupon_description"
            android:gravity="start"
            android:layout_margin="4dp" />

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

CouponList.java(Recyclerview適配器)

public class CouponList extends RecyclerView.Adapter<CouponList.ViewHolder> {
    private ArrayList<String> coupons;
    private OnActionCompleted callback;

    public CouponList(ArrayList<String> coupons,OnActionCompleted callback)
    {
        this.coupons = coupons;
        this.callback = callback;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_coupon_info,parent,false));
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.description.setText(coupons.get(position);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView description;
        public ViewHolder(View itemView) {
            super(itemView);
            description = (TextView) itemView.findViewById(R.id.coupon_description);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            String coupon = coupons.get(getAdapterPosition());
            callback.OnClick(coupon);
        }

    }

    public interface OnActionCompleted {
        public void OnClick(Coupon coupon);
    }
}

您也可以在“活動”中使用它,以便在回收器視圖項目中輕松實現多個小部件單擊:)

在回收者視圖項目onClick中執行以下操作。

FragmentManager fm = getFragmentManager();// If you're in an activity.
FragmentManager fm = getSupportFragmentManager();// If you're already inside another fragment
YourFragment yfObj = new YourFragment();
fm.beginTransaction().replace(R.id.fragmentContainer, yfObj).commit();

在這里,fm是FragmentManager對象,只有您可以使用它執行片段事務,例如加載新片段。

yfObj是要加載的片段類的對象。

R.id.fragmentContainer是您在XML文件中聲明的容器布局的ID,您想在其中加載片段。

希望這可以幫助 !

暫無
暫無

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

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