如何将AlertDialog中的Spinner添加到RecyclerItemClickListener中

时间:2015-12-05 16:21:01

标签: android android-recyclerview

我在向AlertDialog添加微调器时遇到问题。

我正在使用RecyclerView列表,当我点击我的RecyclerView项目时,AlertDialog已打开,并且此AlertDialog中有一个Spinner。但我的AlertDialog有问题要打开。问题是:

 12-05 14:12:37.695  17204-17204/br.com.appoint.android E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
        at br.com.appoint.android.activity.AgendaActivity$1.onItemClick(AgendaActivity.java:125)
        at br.com.appoint.android.listener.RecyclerItemClickListener.onInterceptTouchEvent(RecyclerItemClickListener.java:39)
        at android.support.v7.widget.RecyclerView.dispatchOnItemTouch(RecyclerView.java:2117)
        at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2246)
        at android.view.View.dispatchTouchEvent(View.java:7690)

按照我的AgendaAcitivty类(仅限alertDialog的一部分)和我的RecyclerItemClickListener类进行操作。

我不知道这个问题是什么,请你帮忙吗?感谢

AgendaActivity.class

 mRecyclerViewResult.addOnItemTouchListener(new RecyclerItemClickListener(AgendaActivity.this,
            new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {

                    final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext(), position);
                    LayoutInflater layoutInflater = getLayoutInflater();
                    View view1 = layoutInflater.inflate(R.layout.confirmar_consulta_layout, null, true);

                    List<String> list = new ArrayList<String>();
                    list.add("Item 1");
                    list.add("Item 3");
                    list.add("Item 3");

                    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(view.getContext(),
                            android.R.layout.simple_spinner_item, list);
                    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    mSpinner1.setAdapter(dataAdapter);

                    builder.setView(view1);

                    builder.setPositiveButton(getString(R.string.confirm), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            }
                    });
                    builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
                    builder.show();
                    //Toast.makeText(AgendaActivity.this, "click no item do recycleview", Toast.LENGTH_LONG).show();
                }
            }));

关注我的RecyclerItemClickListener类

公共类RecyclerItemClickListener实现了RecyclerView.OnItemTouchListener {

   private OnItemClickListener mListener;

    public interface OnItemClickListener {
         public void onItemClick(View view, int position);
    }

    GestureDetector mGestureDetector;

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
         mListener = listener;
         mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
         @Override public boolean onSingleTapUp(MotionEvent e) {
             return true;
         }
    });
}

@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
    View childView = view.findChildViewUnder(e.getX(), e.getY());
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
        mListener.onItemClick(childView, view.getChildPosition(childView));
    }
    return false;
}

@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}

@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

}

问题在代码行中出现:(来自myRecyclerItemClickListener类)

if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
        mListener.onItemClick(childView, view.getChildPosition(childView));
    }

1 个答案:

答案 0 :(得分:0)

在Spinner初始化中缺少put视图

正确的是

  mRecyclerViewResult.addOnItemTouchListener(new RecyclerItemClickListener(AgendaActivity.this,
            new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {

                    final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
                    LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View v = layoutInflater.inflate(R.layout.confirmar_consulta_layout, null, true);
                    mSpinner1 = (Spinner) v.findViewById(R.id.spinner1);
                    builder.setView(v);

                    builder.setPositiveButton(getString(R.string.confirm), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    });
                    builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
                    builder.show();

                    List<String> list = new ArrayList<String>();
                    list.add("Unimed");
                    list.add("SulAmerica");
                    list.add("Bradesco Saude");

                    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(v.getContext(),
                            android.R.layout.simple_spinner_item, list);
                    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                    mSpinner1.setAdapter(dataAdapter);
                    //Toast.makeText(AgendaActivity.this, "click no item do recycleview", Toast.LENGTH_LONG).show();
                }
            }));