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