2017-02-20 7 views
-1

Androidスタジオの使用を開始したばかりですが、自分のボタンをウェブページにリンクするチュートリアルをたどりましたが、アプリがクラッシュしてエラーが発生しました。オンラインで見ていますが、私は間違ったことを見つけたようです。何か不足していますか?onClickボタンクラッシュ

これらのエラーです:

/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.josh.test2, PID: 2264 
       java.lang.IllegalStateException: Could not find method browser1(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'button' 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
        at android.view.View.performClick(View.java:5610) 
        at android.view.View$PerformClick.run(View.java:22265) 
        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:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

そして、これは私が続い何私のコードです:

Frag1.java

package com.example.josh.test2; 

import android.app.Fragment; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

import java.net.URI; 
import java.util.zip.Inflater; 



public class Frag1 extends Fragment { 

View myView; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    myView = inflater.inflate(R.layout.layout1, container, false); 
    return myView; 


    public View onCreateView(Bundle savedInstance){ 

     View rootView = Inflater.from(getContext()).inflate(R.layout.fragmet_view); 

     Button browse = (Button) rootView.findViewById(R.id.button); 
     browse.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       Intent browserIntent=new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.co.uk")); 
       startActivity(browserIntent); 
      } 
     }); 

     return rootView; 
    } 
} 

layout.xml

<Button 
    android:text="Test" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="18sp" 
    android:id="@+id/button"/> 
+1

私はこれはおそらく最悪の問題ですけど、**アンドロイドからあなたのボタンロジックを追加することができます)はアクティビティで定義されますが、これがフラグメント内で呼び出されることを期待している場合は、泣きそうになります。この動作を維持したい場合は、フラグメントをホストしているアクティビティ内で** public void browser1(View)を定義する必要があります** – ShayHaned

+0

コードに 'browser1(View) 'というメソッドがありません – SQLiteNoob

+0

' androidを使用してください。 'Fragment'クラスのために' android.app.Fragment'の代わりに 'support.v4.app.Fragment'を追加しました。 –

答えて

0

まず任意のレイアウトXMLからandroid:onClick="browser1"を削除:

より良い解決策は、動的にonClick方法を作ることです。 onClick = browser1 **イベントます。public void browser1を発射します(閲覧:

その後、あなたはJavaコード

public class YourFragment extends android.support.v4.app.Fragment { 

    // TODO: Implement onCreateView 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Handle click 
      } 
     }); 
} 
+0

ありがとうございました! – ODoe

0

あなたはメソッドをフラグメント内ではなく、アクティビティを検索するため、フラグメント内にないアクティビティでメソッドを定義する必要があります。 、

public View onCreateView(Bundle savedInstance){ 

View rootView = Inflater.from(getContext()).inflate(R.layout.fragmet_view); 

Button browse = (Button) rootView.findViewById(R.id.button); 
browse.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      Intent browserIntent=new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.co.uk")); 
      startActivity(browserIntent); 
     } 
}); 

return rootView; 
} 
+0

MainActivity、java以外は同じですか? – ODoe

+0

@ODoeいいえ、あなたはXMLから 'android:onClick'を取り除き、図示のようにJavaを使って定義する必要があります。 (フラグメント内) –

+1

mainActivityでonClickを定義する必要はありません。xmlから 'android:onClick'を削除してフラグメントに定義してください。ルートビューはフラグメントのメインビューです。 –