2017-11-02 9 views
-1

私は、「今までのアクティビティクラスのメソッドonclick(view)を見つけることができませんでした」というエラーが発生しました。どんなに進んでいない。ここでアクティビティクラスのメソッドonclick(view)を見つけることができませんでした

私のコードです:

LogCat:

02 15:44:48.972 14881-14881/edu.uwgb.ratemyanimal E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: edu.uwgb.ratemyanimal, PID: 14881 
    java.lang.IllegalStateException: Could not find method switchImage(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'btnThumbsUp' 
     at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:4757) 
     at android.view.View$DeclaredOnClickListener.onClick(View.java:4716) 
     at android.view.View.performClick(View.java:5637) 
     at android.view.View$PerformClick.run(View.java:22429) 
     at android.os.Handler.handleCallback(Handler.java:751) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6119) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

switchImage機能:今コメントアウトされている

public void switchImage() 
{ 
    Toast.makeText(getActivity().getApplicationContext(), "Function hit", Toast.LENGTH_SHORT).show(); 
} 

二onClickListeners:

 // onclick 
//  Button btnThumbsUp = (Button) getActivity().findViewById(R.id.btnThumbsUp); 
// 
//  btnThumbsUp.setOnClickListener(new View.OnClickListener(){ 
//   public void onClick(View v) { 
//    ImageView dogImage = getActivity().findViewById(R.id.imageDog); 
////    dogImage.setImageResource(dogImages.get(index)); 
//    dogImage.setImageResource(dogImages.get(index)); 
// 
//    Toast.makeText(getActivity().getApplicationContext(), "Function hit", Toast.LENGTH_SHORT).show(); 
// 
//    index++; 
// 
//   } 
//  }); 
// 
//  Button btnThumbsDown = getActivity().findViewById(R.id.btnThumbDown); 
// 
//  btnThumbsDown.setOnClickListener(new View.OnClickListener(){ 
//   public void onClick(View v) { 
//   } 
//  }); 

XMLについてフラグメント:

  • はアンドロイド `とXMLを通じて関数を呼び出す<Button/>から<android.support.v7.widget.AppCompatButton
  • にXMLでボタンに変更:のonClick = "switchImageを"
  • 私が試してみました

    <android.support.v7.widget.AppCompatButton 
        android:id="@+id/btnThumbsUp" 
        android:layout_width="130dp" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="-118dp" 
        android:layout_marginTop="-751dp" 
        android:text="Thumbs Up" 
        android:onClick="switchImage" 
        app:layout_constraintLeft_toLeftOf="parent" 
        app:layout_constraintTop_toBottomOf="@id/guideButtons" /> 
    
    <android.support.v7.widget.AppCompatButton 
        android:id="@+id/btnThumbDown" 
        android:text="Thumbs Down" 
        android:onClick="switchImage" 
        android:layout_width="130dp" 
        android:layout_height="wrap_content" 
        app:layout_constraintTop_toBottomOf="@id/guideButtons" 
        app:layout_constraintRight_toRightOf="parent"/> 
    

    物事

  • 実際のonClickListenerをフラグメントのonCreateファンクション内に作成する

私はこれをかなり長い間働かせようとしています。私はこれについて多くの異なったことを調べ、何も働いていない。私は下のナビゲーションバーの中にさまざまな断片を作り、私の人生のために働くためにボタンを得ることができません。

ありがとうございました。

EDIT:

ここではonCreateView方法である:

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

     Button btnThumbsUp = (Button) getActivity().findViewById(R.id.btnThumbsUp); 

     btnThumbsUp.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v) { 
       ImageView dogImage = getActivity().findViewById(R.id.imageDog); 
       dogImage.setImageResource(dogImages.get(index)); 

//    Toast.makeText(getActivity(), "Function hit", Toast.LENGTH_SHORT).show(); 

       index++; 

      } 
     }); 
+0

私はあなたがappcompatボタンへの変更を試したようなことは不要です。 xmlからの呼び出しは、フラグメントではないアクティビティーでのみ機能し、最後に、ソリューションは 'onCreate'ではなくonCreateViewで行わなければなりません。下の私の答えに詳しい情報をチェックしてください! – Xenolion

答えて

4

あなたは属性で使用する方法は、単一のViewの引数を取る必要があります。この方法は、その中にgetActivity()それは断片中に位置していることをヒントを持っているという事実:また

public void switchImage(View view) 

public void switchImage() 

を変更します。リスナーはアトリビュートで設定されているため、メソッドのアクティビティのみが検索されるため、アクティビティに含める必要があります。

(あるいは:。フラグメント内のすべてのが、findViewById()setOnClickListener()を使用していない)

+0

そうすることはうまくいかないようでした。私はまだ同じエラーが発生します。 – Matt

+0

私はフラグメント内でOPが 'getActivity'を呼び出すと言うでしょう。それがうまくいかない理由を説明します – Eselfar

0

あなたの方法switchImage(View view)Fragmentでこのandroid:onClick="switchImage"が機能するために用Activityませにする必要があります。

そして、あなたは、あなたがonCreateFragmentませonCreateViewで行うOnClicklistenerを設定しようとしたと述べた(フラグメントのためAdvicedを!)だから私はあなたがフラグメントのonCreate方法ではなく、onCreateViewにonClickListener設定ではなく、お勧めします。これは、Fragmentsにアクティビティにアタッチされるまでコンテキストがないためです。

Toast.makeText(getActivity().getApplicationContext(), "Function hit", Toast.LENGTH_SHORT).show(); 

それだけでgetActivity()を使用ここでは必要ではないgetApplicationContext()を削除します。また、あなたのコードの改善は、アプリケーションコンテキストは、この行で、このようトーストを表示するのに不必要であるということであることを後

+0

あなたは、onClickListenersは断片的であってはならないと言っていますか? – Matt

+0

フラグメントではなくonCreateViewメソッドである必要がありますonCreateメソッドではない@Matt – Xenolion

+0

フラグメントでは、onCreateViewメソッドをオーバーライドすることができます。@ Matt – Xenolion

関連する問題