2016-04-06 10 views
1

アンドロイドの初心者。コードは私にとってうまく見えますが、テストするとボタンをクリックしても何も起こりません。私は開始アクティビティ(ここではAct2)内のonCreateメソッドのlog.iを追加し、それは表示されないので、私はどこかで間違いを犯したにちがいありません。フラグメントボタンからアクティビティを開始できません

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

    //startNFC Activity when button clicked 
    View view = inflater.inflate(R.layout.fragment_find_book, container, false); 
    Button button = (Button) view.findViewById(R.id.button1); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(getActivity(), Act2.class); 
      startActivity(i); 
     } 
    }); 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_find_book, container, false); 
} 

上記のコードに問題がありますか?チェックリストも役に立ちます。たぶん私はいくつかの他の明白なオーバーライド方法がないのでしょうか?

私は喜んでコードを投稿します。ここでは、基本的には、このボタンが含まれているフラグメントの中にMainActivityのみが含まれていることに注意してください。

答えて

3

viewを返す必要があります。現在、クリックリスナーが設定されていないボタンを持つまったく新しいビュー階層を作成するレイアウトを再拡張しています。あなたがボタンを押しても何も起こらないのはこのためです。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    //...everything you currently have 
    return view; 
} 
+0

私はチュートリアルをやり直す必要があります。とても明らかです。ありがとう! – Dimebag

+0

ようこそ。 –

2

あなたは二回、あなたのレイアウトを膨らませている

return view; 

return inflater.inflate(R.layout.fragment_find_book, container, false); 

を交換してください。 ClickListenerを最初のものに割り当てますが、2番目のものを使用します。

0

このようにコードを変更します。

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

     return inflater.inflate(R.layout.fragment_find_book, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     Button button = (Button) getView().findViewById(R.id.button1); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(getActivity(), Act2.class); 
       startActivity(i); 
      } 
     }); 

    } 
+1

onCreateViewではなくonActivityCreatedでボタンを設定する利点/根拠は何ですか? – Dimebag

+1

レイアウトを拡張する前にビュー(ボタンなど)の初期化ができないため、onActivityCreatedメソッドのボタンを設定する必要があります。 –

+0

@BKS onCreateView()メソッドでオペレータが 'view'を割り当てたとき、ビューは適切に初期化されます。 'onActivityCreated()'は、フラグメントのレイアウトでビューを参照して設定する伝統的な場所ではありません。もし何かあれば、 'onActivityCreated(...)'ではなく 'onViewCreated(...)'を第2のオプションとして使用すべきです。 –

関連する問題