2016-10-25 9 views
0

AQueryを使用してAPIからrecycleviewのデータを取得していますが、今はAPIのonclickからrecyclerviewアイテムのフラグメントを開きたいのですがどうすれば実装できますか? 私はInstagram appと同じことをやりたがっています。ホームページのように名前をクリックすると、別の断片のユーザーの詳細がすべて取得されます。Open Fragment APIを使用してRecyclerviewアイテムをオンクリックする

+0

単に_FragmentTransaction_を使用できます。しかし、アダプタクラスからのオープンフラグメントは推奨されていませんので、リスナーを実装する必要があります。 – Piyush

答えて

0

リサイクル業者の表示項目onClickで次の操作を行います。

ここで、fmはFragmentManagerオブジェクトで、新しいフラグメントの読み込みなど、フラグメントトランザクションを実行できます。

yfObjは、ロードするフラグメントクラスのオブジェクトです。

R.id.fragmentContainerは、フラグメントをロードするXMLファイルで宣言したコンテナレイアウトのIDです。

希望すると便利です。

+0

私はRecyclerViewAdapterまたはMainFragmentクラスにOnClickListnerを置く必要がありますか?MainFragmentにAPIを置く場所はどこですか? – User16

+0

リサイクル・ビュー項目レイアウトのルート・レイアウトのオブジェクトをアダプタに作成し、そこでクリックを処理できます。 –

+0

APIについては、アクティビティ/フラグメント内のAPIを呼び出してそこからAPIのデータを読み込むことができると思います。そして、そのデータをアダプター・クラスに送って、リサイクラー・ビューをロードします。 –

1
//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); 
    } 
} 

あなたはリサイクルビュー項目で複数のウィジェットをクリックするために簡単に実装するために、同様の活動でこれを使用することができます:)

関連する問題