OnClick внутри фрагмента, вызванного активностью

Я инкапсулирую материал в фрагмент на данный момент и сталкиваюсь с проблемой, которая трудно для Google. Внутри моего фрагмента есть несколько кнопок с атрибутами onClick, но они вызываются в Activity скорее как фрагмент из системы Android – это делает инкапсуляцию немного неуклюжей. Есть ли способ, чтобы материал отражения от onClick вызывал фрагмент? Единственное решение, которое я вижу на данный момент, – это не использовать onClick в xml и устанавливать клики-прослушиватели внутри фрагмента с помощью кода.

Solutions Collecting From Web of "OnClick внутри фрагмента, вызванного активностью"

Я говорил с некоторыми googlers @ # adl2011 – они распознают проблему, и, возможно, в будущем это будет исправление. До тех пор – нужно использовать .setOnClick в фрагменте.

Проблема в том, что когда макет раздувается, он все еще выполняет Хостинг, на который нажимают кнопки, а не отдельные фрагменты.

Я предпочитаю использовать следующее решение для обработки событий 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; } } } 

Тогда проблема ушла.

Меня устраивает

Добавить импорт:

  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; } 

ВОПРОС:

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; } } 

У вас может быть слушатель, который вызывается в операции, переадресовывает вызов на прослушиватель в фрагменте. Вы должны иметь ссылку на фрагмент внутри FragmentActivity для передачи вызова. Вам нужно будет выполнить вызов для вызова метода или реализовать фрагмент интерфейса, который вы определяете. Я знаю, что это не лучшее решение, но оно будет работать. Вы также можете использовать тег кнопки, чтобы указать имя метода для вызова, если хотите. Надеюсь это немного поможет.

Попробуй это…

  @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;