web-dev-qa-db-ja.com

onClickListenerはフラグメントでは機能しません

フラグメント内のonClicklistenerにいくつか問題があります。ボタンをクリックしても何も起こりません。 LogcatのonClicklistenerからメッセージが表示されず、Toastも画面に表示されませんが、コードにエラーが見つかりません。何か案は?

助けていただければ幸いです!どうもありがとう!そして私の悪い英語でごめんなさい

import Android.app.Fragment;
import Android.os.Bundle;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.view.ViewGroup;
import Android.widget.EditText;
import Android.widget.Button;
import Android.widget.Toast;
import Android.util.Log;

public class InputFragment extends Fragment
{   
EditText input_text;
String text;
Button translate_button;

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

    input_text = (EditText) InputFragmentView.findViewById(R.id.input_field);

    translate_button = (Button) InputFragmentView.findViewById(R.id.translate);


    translate_button.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            Log.d("Test", "onClickListener ist gestartet");
            Toast.makeText(getActivity().getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
            saveInString();

        }
    });

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

public void saveInString()
{
    if(text.equals(null))
    {
        Toast.makeText(getActivity().getApplicationContext(), "Das Feld ist leer!", Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(getActivity().getApplicationContext(), "Speichern...", Toast.LENGTH_LONG).show();
        text = input_text.getText().toString();
        Toast.makeText(getActivity().getApplicationContext(), "Fertig", Toast.LENGTH_SHORT).show();
    }

}
}    
8
reedts

私はあなたのコードに問題があると思います

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{ 
.....
....
 //problem is here below line
 return inflater.inflate(R.layout.input_fgmt, container, false);
}

すでに膨らんだビューを返します

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

     return inputFragmentView;
    }
27

変化する

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

 return InputFragmentView ;

また、これで変更します。

translate_button.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        Log.d("Test", "onClickListener ist gestartet");
        Toast.makeText(getActivity().getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
        saveInString();

    }
});

そしてimport Android.view.View;としてインポートします

3
Piyush

コードにこの変更を加えますか

  1. クラス定義について:

     public class InputFragment extends Fragment implements View.OnClickListener
    
  2. setOnClickListenerの呼び出し時:

        translate_button.setOnClickListener(new View.OnClickListener()
        {
              @Override
              public void onClick(View InputFragmentView)
              {
                      Log.d("Test", "onClickListener ist gestartet");
                      Toast.makeText(getActivity().getApplicationContext(), "Test", Toast.LENGTH_LONG).show();                                    
                      saveInString();
              }
         });
    
2
user2771923

すべてのビューを作成するための最良の方法は、メソッドを再定義する必要があります。

@Override
public void onActivityCreated(Bundle saved) {
    super.onActivityCreated(saved);
     input_text = (EditText) InputFragmentView.findViewById(R.id.input_field);

translate_button = (Button) InputFragmentView.findViewById(R.id.translate);


translate_button.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        Log.d("Test", "onClickListener ist gestartet");
        Toast.makeText(getActivity().getApplicationContext(), "Test",        Toast.LENGTH_LONG).show();
        saveInString();

    }
});

このメソッドは、すべてのビューが作成された後に呼び出されるためです。 Fragmentのライフサイクルを読む必要があります。

2
Sayros

setOnItemClickListenerは、setOnClickListenerの代わりにフラグメントを使用して動作します

0
Abdelah