Я инкапсулирую материал в фрагмент на данный момент и сталкиваюсь с проблемой, которая трудно для Google. Внутри моего фрагмента есть несколько кнопок с атрибутами onClick, но они вызываются в Activity скорее как фрагмент из системы Android - это делает инкапсуляцию немного неуклюжей. Есть ли способ, чтобы объекты отражения от onClick вызывали фрагмент? Единственное решение, которое я вижу на данный момент, это не использовать onClick в xml и устанавливать клик-прослушиватели внутри фрагмента с помощью кода.
OnClick внутри фрагмента, вызванного активностью
Ответ 1
Я поговорил с некоторыми googlers @# adl2011 - они распознают проблему и, возможно, в будущем будет исправлено это. До тех пор - нужно использовать .setOnClick во Фрагменте.
Ответ 2
Проблема заключается в том, что когда макет раздувается, он все еще является хостинговой операцией, которая получает нажатие кнопки, а не отдельные фрагменты.
Я предпочитаю использовать следующее решение для обработки событий onClick. Это также работает для Activity и Fragments.
public class StartFragment extends Fragment implements OnClickListener{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_start, container, false);
        Button b = (Button) v.findViewById(R.id.StartButton);
        b.setOnClickListener(this);
        return v;
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.StartButton:
            ...
            break;
        }
    }
}
Тогда проблема исчезла.
Ответ 3
Это работает для меня
Добавить импорт:
    import android.view.View.OnClickListener;
Fragment.java
    ...
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
       rootView = (ViewGroup) inflater.inflate(R.layout.fragment, container, false);
       Button mButton = (Button) rootView.findViewById(R.id.button);
       mButton.setOnClickListener(new OnClickListener() {
          public void onClick(View v) {
          }
       });
       return rootView;
    }
		Ответ 4
ВОПРОС:
1. В атрибуте XML onClick будет вызываться активный метод активности.
2. Необработанный общедоступный метод.
3. Повторное использование фрагментов.
РЕШЕНИЕ:
В Макет фрагмента добавьте его в представление.
android:onClick="onFragmentViewClick"
В каждой активности фрагмент может принадлежать..
public void onFragmentViewClick(View v) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container);
    if (fragment != null && fragment.isVisible()) {
        if (fragment instanceof SomeFragment) {
            ((SomeFragment) fragment).onViewClicked(v);
        }
    }
}
В Фрагмент включите этот метод.
public void onViewClicked(View v) {
    switch (v.getId()) {
        case R.id.view_id:
            Log.e("onViewClicked", "yehhh!!");
            break;
    }
}
		Ответ 5
У вас может быть слушатель, который вызывается в операции, переадресовывает вызов на прослушиватель в фрагменте. Вы должны иметь ссылку на фрагмент внутри FragmentActivity для передачи вызова. Вам нужно будет выполнить вызов для вызова метода или реализовать фрагмент интерфейса, который вы определяете. Я знаю, что это не лучшее решение, но оно будет работать. Вы также можете использовать тег кнопки, чтобы указать имя метода для вызова, если хотите. Надеюсь, это немного помогает.
Ответ 6
Попробуйте это...
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView =  inflater.inflate(R.layout.activity_ipadditional_users, container, false);
    FloatingActionButton button7 = (FloatingActionButton) rootView.findViewById(R.id.fab_ip_additional_user);
    button7.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getActivity(), IPAdditionalUsersEdit.class);
            startActivity(intent);
        }
    });
    return rootView;