2013-08-30 54 views
3

只是徘徊爲什麼下一個代碼與出現「NoSuchMethodException:onPrefImageClick [類android.view.View]」消息。NoSuchMethodException:在的onClick片段

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()方法;

工作得很好。

能/會有人能解釋嗎?

+0

您是否在不支持該方法的較低版本的設備上運行? –

+0

'public void onPrefImageClick'將這個方法寫在Fragment Activity而不是Fragment中。 – user370305

回答

8

你應該把onPrefImageClick其中承載碎片的活動。 這是因爲,Android會在不在Fragment中的Activity中查找方法。 Android並不知道哪個Fragment目前處於運行狀態,因此它看起來在Activity中。

+1

它是因爲從xml的視圖包裝使用活動上下文for inflatinig簡而言之。片段有其自己的生命週期。 – user370305

+0

是的,但簡而言之,我的理由也持有;) –

+0

它應該這樣工作 - 修復Google! –

0

只需卸下最後,把這種方法的片段活動,而不是片段本身!

希望它有幫助!