2015-06-22 3 views
-2

Слушатель кликов в моем фрагменте работает неправильно. Я не получаю отладочные сообщения в моем logcat вообще из моего метода requestData или моего метода onClick. Я думал, что это, вероятно, связано с попыткой использовать методы активности из фрагмента, но я не вижу никаких проблем с этим; это также не повлияет на мои сообщения отладки onClick, которые не отображаются.Фрагмент onClick не работает

активность:

public class MainActivity extends AppCompatActivity { 

    public void requestData(String first, String second) { 
     Log.d(“Success!”, first + “ “ + second); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment_main); 
    } 

Фрагмент:

public class WelcomeFragment extends Fragment implements View.OnClickListener{ 

    private Button mButton; 
    private EditText mFirstEditText; 
    private EditText mSecondEditText; 

    private View v; 

    public WelcomeFragment() { 
    } 

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

     v = inflater.inflate(R.layout.fragment_main, container, false); 
     return v; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 

     super.onActivityCreated(savedInstanceState); 
     mCalculateButton = (Button) v.findViewById(R.id.calculate_button); 
     mCalculateButton.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 

     mFirstEditText = (EditText) v.findViewById(R.id.first_editText); 
     String first = mFirstEditText.getText().toString(); 
     Log.d("Button clicked", "mFirstEditText set " + first); 

     mSecondEditText = (EditText) v.findViewById(R.id.second_editText); 
     String second = mSecondEditText.getText().toString(); 
     Log.d("Button clicked", "mSecondEditText set " + second); 

     v.requestData(first, second); 
    } 

} 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal"> 

    <fragment 
     android:id="@+id/welcome_fragment" 
     android:name="com.example.kent.AnApplication.WelcomeFragment" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1"/> 

</LinearLayout> 

welcome_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       tools:context=".MainActivityFragment"> 

    <TextView 
     android:text="@string/welcome " 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/welcome_textView" 
     android:textSize="20sp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="68dp"/> 

    <EditText 
     android:layout_width="280dp" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:ems="10" 
     android:id="@+id/first_editText" 
     android:layout_marginTop="60dp" 
     android:layout_below="@+id/welcome_textView" 
     android:layout_centerHorizontal="true"/> 

    <EditText 
     android:layout_width="280dp" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:ems="10" 
     android:id="@+id/second_editText" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/calculate_button" 
     android:layout_marginTop="43dp" 
     android:layout_below="@+id/second_editText" 
     android:layout_centerHorizontal="true"/> 

</RelativeLayout> 

ответ

1

Вы не установили прослушиваемый клик. Попробуйте ниже код:

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

     v = inflater.inflate(R.layout.fragment_main, container, false); 
     mButton = (Button) v.findViewById(R.id.your_button_id); 
     mButton.setOnClickListener(this); 
     return v; 
    } 

Если у вас есть некоторые «щелкнул» события, вы должны использовать, если/еще или переключиться на ваш OnClick(); метод.

+0

Не работает для меня –

+0

Можете ли вы разместить свой код макета? –

+0

размещен код макета –

0

Изменить Fragment код следующим образом:

public class WelcomeFragment extends Fragment implements View.OnClickListener{ 

    private Button mButton; 
    private EditText mFirstEditText; 
    private EditText mSecondEditText; 

    private View v; 

    public WelcomeFragment() { 
    } 

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

     v = inflater.inflate(R.layout.fragment_main, container, false); 
     return v; 
    } 

    @Override 
    public void onViewCreated (View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     mCalculateButton = (Button) view.findViewById(R.id.calculate_button); 
     mCalculateButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick (View v) { 
       mFirstEditText = (EditText) v.findViewById(R.id.first_editText); 
       String first = mFirstEditText.getText().toString(); 
       Log.d("Button clicked", "mFirstEditText set " + first); 

      mSecondEditText = (EditText) v.findViewById(R.id.second_editText); 
      String second = mSecondEditText.getText().toString(); 
      Log.d("Button clicked", "mSecondEditText set " + second); 

      v.requestData(first, second); 
     } 
     }); 
    } 
} 
+0

Это не сработало печально. Я не получаю отладочные сообщения в logcat. –

+0

изменил вторую строку в 'onViewCreated' на' mCalculateButton = (Button) view.findViewById (R.id.calculate_button); 'можете попробовать один раз и увидеть –

+0

Я получаю ошибку компилятора для« нового OnClickListener »и метода onClick , –

0

Проблема заключается в методе OnClick, вы не нашли идентификатор этой кнопки, на которой произошел щелчок, изменить OnClick() метод код как:

@Override 
public void onClick(View view) { 
    if(view.getId() == R.id.calculate_button) { 
    mFirstEditText = (EditText) v.findViewById(R.id.first_editText); 
    String first = mFirstEditText.getText().toString(); 
    Log.d("Button clicked", "mFirstEditText set " + first); 

    mSecondEditText = (EditText) v.findViewById(R.id.second_editText); 
    String second = mSecondEditText.getText().toString(); 
    Log.d("Button clicked", "mSecondEditText set " + second); 

    v.requestData(first, second); 
} 

}

Я надеюсь, что это будет работать для вас

+0

эй сделать одну вещь зарегистрируйте свой onClick() прослушиватель в фрагменте onResume() mButton.setOnClickListener (this); –

Смежные вопросы