3

只是想知道为什么下一个代码会出现“NoSuchMethodException:onPrefImageClick [class android.view.View]”消息。

    public View onCreateView(LayoutInflater inflater,
                         ViewGroup container,
                         Bundle savedInstanceState)
{
    View mView = inflater.inflate(R.layout.pref_detail_fragment, container, false);

    return mView;
}   // onCreateView()


public void onPrefImageClick(final View clickedView)
{
    switch(clickedView.getId())
    {
    case R.id.prefDetailImage:
        Log.i(TAG, "Clicked on the image");
        break;
    case R.id.prefDetailText:
        Log.i(TAG, "Clicked on the text");
        break;
    default:
        Log.i(TAG, "Clicked some where");
    }
}   // onPrefImageClick()

               android:onClick="onPrefImageClick"

存在于 xml 中。

而这段代码:

    @Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container,
                         Bundle savedInstanceState)
{
    View mView = inflater.inflate(R.layout.pref_detail_fragment, container, false);


    final ImageView imgView = (ImageView) mView.findViewById(R.id.prefDetailImage);
    imgView.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.i(TAG, "Clicked on the image");
            // Perform action on click
        }
    });

    return mView;
}   // onCreateView()

同时删除了 xml 中的行和 onPrefImageClick() 方法;

工作得很好。

可以/有人解释一下吗?

4

2 回答 2

9

您应该将onPrefImageClickActivity 放入托管 Fragments 的活动中。这是因为,Android 会在 Activity 中而不是在 Fragment 中寻找方法。Android 不确定当前是哪个 Fragment,因此它会在 Activity 中查找。

于 2013-08-30T10:49:37.693 回答
0

只需删除 final 并将此方法放在片段活动上,而不是片段本身!

希望能帮助到你!

于 2013-08-30T10:52:54.703 回答