Android 在对话框片段和自定义listview适配器之间实现接口时出错

Android 在对话框片段和自定义listview适配器之间实现接口时出错,android,listview,android-fragments,android-listview,interface,Android,Listview,Android Fragments,Android Listview,Interface,我试图在片段和自定义listview适配器之间实现一个接口,如下所示。但是,每当调用onClick侦听器时,我都会得到一个空指针。下面是必要的代码。 对话框片段: public class MoodDialog extends DialogFragment implements OnClickListener, EmoticonClickListener { ImageView emoticon; EditText mood; private Bitmap[] emoticons;

我试图在片段和自定义listview适配器之间实现一个接口,如下所示。但是,每当调用onClick侦听器时,我都会得到一个空指针。下面是必要的代码。 对话框片段:

public class MoodDialog extends DialogFragment implements OnClickListener,
    EmoticonClickListener {

ImageView emoticon;
EditText mood;
private Bitmap[] emoticons;

EmoticonClickListener mListener;

GridView emoticonsGrid;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.fragment_mood, null);

    ArrayList<String> emoticonsInAPage = new ArrayList<String>();

    // Inflate and set the layout for the dialog
    // Pass null as the parent view because its going in the dialog layout
    builder.setView(view)
            // Add action buttons
            .setPositiveButton("Update",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int id) {
                            // sign in the user ...
                        }
                    })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            MoodDialog.this.getDialog().cancel();
                        }
                    });

    for (int i = 0; i <= 19; i++) {
        emoticonsInAPage.add(mThumbIds[i]);
    }

    emoticonsGrid = (GridView) view.findViewById(R.id.mood_emoticons_grid);
    MoodEmoticonImageAdapter adapter = new MoodEmoticonImageAdapter(
            getActivity().getApplicationContext(), emoticonsInAPage,
            mListener);

    emoticonsGrid.setAdapter(adapter);

    mood = (EditText) view.findViewById(R.id.mood_edittext_mood);
    emoticon = (ImageView) view.findViewById(R.id.mood_imageView_emoticon);
    emoticon.setOnClickListener(this);
    return builder.create();
}

@Override
public void emoticonClickedIndex(final String index) {
    ImageGetter imageGetter = new ImageGetter() {
        public Drawable getDrawable(String source) {
            StringTokenizer st = new StringTokenizer(index, ".");
            Drawable d = new BitmapDrawable(getResources(),
                    emoticons[Integer.parseInt(st.nextToken()) - 1]);
            d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            // d.setBounds(0, 0,35, 35);
            return d;
        }
    };

    Spanned cs = Html.fromHtml("<img src ='" + index + "'/>", imageGetter,
            null);

    int cursorPosition = mood.getSelectionStart();
    mood.getText().insert(cursorPosition, cs);

    emoticonsGrid.setVisibility(View.GONE);


}
}
第63行是

mListener.keyClickedIndex(path);

我将感谢您帮助我解决此错误。谢谢。

基于日志的这一部分:

.gigit.MoodEmoticonImageAdapter$1.onClick(MoodEmoticonImageAdapter.java:63)
它说异常是由
moodemoonimageadapter
的匿名内部类(
$1
)的
onClick()方法引起的。您正在向我们显示另一个适配器的代码

无论如何,该错误是由于您正在传递未初始化的数据成员而导致的( EmoticonClickListener mListener),当您应该将
this
作为参数传递时,如下所示:

MoodEmoticonImageAdapter adapter = new MoodEmoticonImageAdapter(
        getActivity().getApplicationContext(), emoticonsInAPage, this);
因为
MoodDialog
正在实现
emoticonClickedListener
,并且您希望将其作为引用传递,因此您的
moodomonimageAdapter
可以调用方法
emoticonClickedIndex()

.gigit.MoodEmoticonImageAdapter$1.onClick(MoodEmoticonImageAdapter.java:63)
MoodEmoticonImageAdapter adapter = new MoodEmoticonImageAdapter(
        getActivity().getApplicationContext(), emoticonsInAPage, this);