NullPointerException:Fragment类中的SetOnClickListener

时间:2012-07-11 09:46:52

标签: android fragment

当我在Fragment Class中为ImageView添加setOnClickListener时,我遇到了问题。由于NullPointerException而单击ImageView时会发生错误。

以下是我的代码:

public final class TestFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ImageView image = new ImageView(getActivity());
    image.setTag(mContent);
    image.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        HomeActivity h = new HomeActivity();
        String url = h.getEventUrl();

        Intent childClass = new Intent(getActivity(), HomeEventDetailActivity.class);

        childClass.putExtra("eventUrl",url);
        TabGroupActivity parentActivity = (TabGroupActivity)h.getParent();
        parentActivity.startChildActivity("Child_Main1", childClass);
    }
});
    imageManager.displayImage(mContent, image, R.drawable.icon);
    image.setScaleType(ScaleType.FIT_XY);

    LinearLayout layout = new LinearLayout(getActivity());
    layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    layout.setGravity(Gravity.CENTER);
    layout.addView(image);

    return layout;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(KEY_CONTENT, mContent);

    setUserVisibleHint(true);
}
}

请帮助!!!!

1 个答案:

答案 0 :(得分:1)

我认为问题出现在这一行:

ImageView image = new ImageView(getActivity());

不要将片段主机活动作为参数(通过getActivity())传递给此构造函数,而是尝试传递在onCreateView方法末尾返回的布局变量。

ImageView image = new ImageView(layout);

代码看起来像这样:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

LinearLayout layout = new LinearLayout(getActivity());
layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
layout.setGravity(Gravity.CENTER);

ImageView image = new ImageView(layout);
image.setTag(mContent);
image.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
    HomeActivity h = new HomeActivity();
    String url = h.getEventUrl();

    Intent childClass = new Intent(getActivity(), HomeEventDetailActivity.class);

    childClass.putExtra("eventUrl",url);
    TabGroupActivity parentActivity = (TabGroupActivity)h.getParent();
    parentActivity.startChildActivity("Child_Main1", childClass);
}
});
imageManager.displayImage(mContent, image, R.drawable.icon);
image.setScaleType(ScaleType.FIT_XY);
layout.addView(image);
return layout;

}