onClickListener не работает во фрагменте
У меня есть некоторые проблемы с onClicklistener во фрагменте. Если я нажму на кнопку, ничего не произойдет вообще. Я не получаю ни сообщения от onClicklistener в Logcat, ни тоста на экране, но я не могу найти ошибку в коде. Есть идеи?
Буду признателен за любую помощь! Большое спасибо! И извините за мой плохой английский
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();
}
}
}
4 ответа:
Я думаю, что проблема здесь, в вашем коде
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) { ..... .... return InputFragmentView; }
Изменение
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(); } });
И импортировать как импорт android.вид.Вид;
Внесите эти изменения в свой код
Об определении класса:
public class InputFragment extends Fragment implements View.OnClickListener
При вызове 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(); } });
Лучший способ получить все представления, созданные вы должны переопределить methode:
@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(); } });
Потому что этот methode вызывается после того, как все представления были созданы. вы должны прочитать жизненный цикл фрагмента.