RecyclerView.ViewHolderからDialogFragmentを呼び出す方法(インターフェース実装を使用)

2ストーンド

このような状況についての関連する質問はほとんど見られませんでしたが、解決策が見つからなかったため、私の問題は次のようになります。

私は4つのフラグメントを保持するtabLayoutを持っています、フラグメント番号3(カタログ)でユーザーにデータを配信しています、このフラグメントはcardViewのrecyclerViewを保持し、dialogFragmentを呼び出すカードのonclicklistnerを実装しようとしています、私はそうするための最も効率的な方法を理解しています、 viewHolderのインターフェイスを使用すると、recyclerViewアダプターコンストラクターで1つの問題に直面します。

カタログフラグメントは次のとおりです。

public class CatalogFragment extends Fragment implements CustomAdapter.OnItemClickListener {

private FloatingActionButton mSharedFab;
private List<MyProducts> productsList;

//Creating Views
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;

private CustomAdapter.OnItemClickListener listener;//////LISTNER FOR DIALOG???

//Volley Request 
private RequestQueue requestQueue;

//request counter 
private int requestCount = 1;
private static final String URL_INDEX = "http://myserverip/product.php";
//Tag values to read from json
public static final String TAG_IMAGE_URL = "product_img";
public static final String TAG_PRODUCT_SN = "product_serial_num";
public static final String TAG_PRODUCT_TITLE = "product_title";
public static final String TAG_PRODUCT_PRICE = "product_price";
public static final String TAG_PRODUCT_DESCRIPTION = "product_description";

public CatalogFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_catalog, container, false);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
    layoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(layoutManager);
    //recyclerView.setHasFixedSize(true);
    RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
    itemAnimator.setAddDuration(1000);
    itemAnimator.setRemoveDuration(1000);
    recyclerView.setItemAnimator(itemAnimator);

    //Initializing our product list
    productsList = new ArrayList<>();
    requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());

    // fetch data
    getData();



    //initialize adapter

    adapter = new CustomAdapter(listener, productsList, getActivity());
    //Adding adapter to recyclerview
    recyclerView.setAdapter(adapter);
    return view ;
}
 @Override
public void onItemClicked(View v) {
    DialogAddToCartFragment df= new DialogAddToCartFragment();
    df.show(getFragmentManager(), "Dialog");
}

アダプターは、customadapterを使用して3つのパラメーターでインスタンス化されました。

customAdapterクラス:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

public interface OnItemClickListener {
    void onItemClicked(View v);
}

private OnItemClickListener listener;
//Image loader inst for image
private ImageLoader imageLoader;

private Context context;
public Snackbar snackbar;
String title;
//List  all products
List<MyProducts> myProducts;

public CustomAdapter( OnItemClickListener listener, List<MyProducts> myProducts, Context context)
{
    super();
    this.listener = listener;
    this.myProducts = myProducts;
    this.context = context;
}

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

@Override
public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) {

    if( myProducts != null) {
        MyProducts myProducts1 = myProducts.get(position);
        imageLoader = ImageVolley.getInstance(context).getImageLoader();
        imageLoader.get(myProducts1.getProductImage(), ImageLoader.getImageListener(holder.imageView, R.drawable.android_store_log, android.R.drawable.ic_dialog_alert));
        title = myProducts1.getProductTitle();
        //Showing data to the views
        holder.imageView.setImageUrl(myProducts1.getProductImage(), imageLoader);
        holder.textViewProductTitle.setText(myProducts1.getProductTitle());
        holder.textViewProductDescription.setText(myProducts1.getProductDescription());
        holder.textViewProductSerialNumber.setText(myProducts1.getProductSn());
        holder.textViewProductPrice.setText(myProducts1.getProductPrice());
    }
}

@Override
public int getItemCount() {
    return myProducts.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    //Views
    public NetworkImageView imageView;
    public TextView textViewProductTitle;
    public TextView textViewProductDescription;
    public TextView textViewProductSerialNumber;
    public TextView textViewProductPrice;

    //Initializing Views
    public ViewHolder(final View itemView) {
        super(itemView);
        imageView = (NetworkImageView) itemView.findViewById(R.id.imageViewProduct);
        textViewProductTitle = (TextView) itemView.findViewById(R.id.textViewProductTitle);
        textViewProductDescription = (TextView) itemView.findViewById(R.id.textViewProductDescription);
        textViewProductSerialNumber = (TextView) itemView.findViewById(R.id.textViewProductSerialNumber);
        textViewProductPrice = (TextView) itemView.findViewById(R.id.textViewProductPrice);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onItemClicked(v);/////////DIALOG LISTENER????
            }
        });
    }
}

DialogFragment:

public class DialogAddToCartFragment extends DialogFragment {



@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_dialog_add_to_cart, new LinearLayout(getActivity()), false);

    // Retrieve layout elements
    //TextView title = (TextView) view.findViewById(R.id.text_title);

    // Set values
    //title.setText("Not perfect yet");

    // Build dialog
    Dialog builder = new Dialog(getActivity());
    builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
    builder.getWindow().setBackgroundDrawable(new ColorDrawable(Color.GREEN));
    builder.setContentView(view);
    return builder;

}

}

カードをクリックすると、プログラムが閉じます:(

ログは次のとおりです。

07-12 08:42:22.685 2808-2808/com.example.get2i.androidstore E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.example.get2i.androidstore, PID: 2808
                                                                          java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.get2i.androidstore.CustomAdapter$OnItemClickListener.onItemClicked(android.view.View)' on a null object reference
                                                                              at com.example.get2i.androidstore.CustomAdapter$ViewHolder$1.onClick(CustomAdapter.java:102)
                                                                              at android.view.View.performClick(View.java:5198)
                                                                              at android.view.View$PerformClick.run(View.java:21147)
                                                                              at android.os.Handler.handleCallback(Handler.java:739)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:148)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

catalogfragでCustomAdapter.OnItemClickListenerリスナーをどのようにインスタンス化する必要がありますか?アドバイスはありますので、よろしくお願いします!

ρяσѕρєяK

catalogfragでCustomAdapter.OnItemClickListenerリスナーをインスタンス化する必要がありますか?

クラスコンストラクタlistenerに渡す前にオブジェクトを初期化するのを忘れているからCustomAdapterです。次のように実行します。

listener=this;
adapter = new CustomAdapter(listener, productsList, getActivity());
...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

recyclerViewアダプターからフラグメントを呼び出す

分類Dev

RecyclerView.AdapterのViewHolderからMainActivityメソッドを呼び出す方法は?

分類Dev

recyclerview gridlayoutで水平および垂直チェーンタイプの概念を実装する方法は?

分類Dev

リサイクラーアダプターからフラグメントにデータを送信する方法| recyclerviewアダプタからフラグメント関数を呼び出す方法

分類Dev

dagger2を使用してRecyclerView.Adapterからフラグメント関数を呼び出す方法

分類Dev

スクロール中にRecyclerViewアイテムを呼び出す方法

分類Dev

RecyclerView.ViewHolderを拡張するクラスからDialogFragmentを開始する

分類Dev

フラグメント内のRecyclerViewアダプターのメソッドを呼び出す方法

分類Dev

インタフェースを使用してRecyclerViewにClickListenerを設定します。

分類Dev

RecyclerView.ViewHolderにコンテキストパラメータを提供する方法

分類Dev

実装されたインターフェースをサービスから呼び出しますか?

分類Dev

ViewHolder(RecyclerView)からアダプタのメソッドを呼び出せません

分類Dev

リフレクションを使用して取得したRecyclerViewからメソッドを呼び出す

分類Dev

RecyclerViewのViewHolderからアクティビティを呼び出していますか?

分類Dev

RecyclerViewのViewHolderからアクティビティを呼び出していますか?

分類Dev

recyclerViewのアダプター内でscrollToPosition(position)を呼び出す方法は?

分類Dev

RecyclerViewからのDialogFragment

分類Dev

JSONからデータをフェッチし、AsyncTaskを使用してRecyclerViewに配置する方法は?

分類Dev

Android RecyclerView を使用してスワイプメニューを実装する方法は?

分類Dev

RecyclerView.ViewHolderのビューをkotlinにバインドする方法

分類Dev

最初のインデックスにアイテムを追加した後、RecyclerViewのスクロール位置に留まり、notifydatasetchangeを呼び出す方法

分類Dev

別のクラスからRecyclerView.AdapterでnotifyItemChanged()を呼び出す

分類Dev

Recyclerviewからフラグメントにデータを渡す方法

分類Dev

Android - プログラミング スタイル - RecyclerView - ViewHolder または onBindViewHolder で SetText を使用しますか?

分類Dev

RecyclerView-ViewHolderからオブジェクトを取得する

分類Dev

アダプターの外部からRecyclerview.ViewHolderパラメーターにアクセスする方法は?

分類Dev

DialogFragmentのRecyclerview

分類Dev

RecyclerViewの単一のインターフェースで複数のonClickメソッドを使用する

分類Dev

RecyclerViewアダプターのOnClickListenerがクラッシュする:アクティビティコンテキストの外部からstartActivity()を呼び出すには、FLAG_ACTIVITY_NEW_TASKフラグが必要です

Related 関連記事

  1. 1

    recyclerViewアダプターからフラグメントを呼び出す

  2. 2

    RecyclerView.AdapterのViewHolderからMainActivityメソッドを呼び出す方法は?

  3. 3

    recyclerview gridlayoutで水平および垂直チェーンタイプの概念を実装する方法は?

  4. 4

    リサイクラーアダプターからフラグメントにデータを送信する方法| recyclerviewアダプタからフラグメント関数を呼び出す方法

  5. 5

    dagger2を使用してRecyclerView.Adapterからフラグメント関数を呼び出す方法

  6. 6

    スクロール中にRecyclerViewアイテムを呼び出す方法

  7. 7

    RecyclerView.ViewHolderを拡張するクラスからDialogFragmentを開始する

  8. 8

    フラグメント内のRecyclerViewアダプターのメソッドを呼び出す方法

  9. 9

    インタフェースを使用してRecyclerViewにClickListenerを設定します。

  10. 10

    RecyclerView.ViewHolderにコンテキストパラメータを提供する方法

  11. 11

    実装されたインターフェースをサービスから呼び出しますか?

  12. 12

    ViewHolder(RecyclerView)からアダプタのメソッドを呼び出せません

  13. 13

    リフレクションを使用して取得したRecyclerViewからメソッドを呼び出す

  14. 14

    RecyclerViewのViewHolderからアクティビティを呼び出していますか?

  15. 15

    RecyclerViewのViewHolderからアクティビティを呼び出していますか?

  16. 16

    recyclerViewのアダプター内でscrollToPosition(position)を呼び出す方法は?

  17. 17

    RecyclerViewからのDialogFragment

  18. 18

    JSONからデータをフェッチし、AsyncTaskを使用してRecyclerViewに配置する方法は?

  19. 19

    Android RecyclerView を使用してスワイプメニューを実装する方法は?

  20. 20

    RecyclerView.ViewHolderのビューをkotlinにバインドする方法

  21. 21

    最初のインデックスにアイテムを追加した後、RecyclerViewのスクロール位置に留まり、notifydatasetchangeを呼び出す方法

  22. 22

    別のクラスからRecyclerView.AdapterでnotifyItemChanged()を呼び出す

  23. 23

    Recyclerviewからフラグメントにデータを渡す方法

  24. 24

    Android - プログラミング スタイル - RecyclerView - ViewHolder または onBindViewHolder で SetText を使用しますか?

  25. 25

    RecyclerView-ViewHolderからオブジェクトを取得する

  26. 26

    アダプターの外部からRecyclerview.ViewHolderパラメーターにアクセスする方法は?

  27. 27

    DialogFragmentのRecyclerview

  28. 28

    RecyclerViewの単一のインターフェースで複数のonClickメソッドを使用する

  29. 29

    RecyclerViewアダプターのOnClickListenerがクラッシュする:アクティビティコンテキストの外部からstartActivity()を呼び出すには、FLAG_ACTIVITY_NEW_TASKフラグが必要です

ホットタグ

アーカイブ