2014-01-06 2 views
0

У меня есть фрагмент, который раздувает пользовательский вид.Создание пользовательского onClickListner для фрагмента

В настоящее время просматривать обновления, когда пользователь нажимает на нее с помощью функции представления

public boolean onTouchEvent(MotionEvent event) {... } 

Однако, я также хочу обновить, какие фрагменты отображаются при наличии MotionEvent. Не рекомендуется, чтобы получить доступ к FragmentManager внутри пользовательского представления и делать что-то вроде:

try{ 
    Activity a = (Activity) context; 
    FragmentManager fm = a.getFragmentManager(); 
    // Use the fragment manager 
} catch (ClassCastException e) { 
    Log.d(TAG, "Can't get the fragment manager with this"); 
} 

Кажется грязным и полным пит-падения. Я вижу, что для фрагмента, который расширяет ListFragment, есть public void onListItemClick(ListView l, View v, int position, long id), который позволит создать обратный вызов, есть ли способ заставить это работать для стандартного фрагмента?

UPDATE:

Для тех, кто заинтересован, решение положить onClickListener в фрагменте onCreateView что-то вроде:

  View canvasView = inflater.inflate(R.layout.canvas_view , container, false); 
      ComposeView myView = (ComposeView) canvasView.findViewById(R.id.myDrawView2); 
      myView.setOnClickListener(new OnClickListener() 
      { 
       @Override 
       public void onClick(View view) { 
        Log.d("FRAG", "OnClick Called"); 
        showNumericInput(); 
       } 
      }); 

      return canvasView; 

А также генерировать clickEvent в onTouchEvent на View this.performClick();. Таким образом, будет вызван вид s onTouchEvent`, и это запустит последующий clickEvent, который вызовет обработчик, определенный во Фрагменте.

+0

Невидимая кнопка в качестве фона фрагмента? Вам нужно будет сделать базовый макет RelativeLayout и поместить другие виджеты поверх невидимой кнопки. –

+0

Внедрите пользовательский интерфейс в своей деятельности и передайте ссылку на интерфейс для требуемой деятельности. – dm78

ответ

0

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

  1. Имейте родительскую деятельность с макетом с фрагментом в макете.
  2. Установите onClickListener на макет, который прикрепляет и отделяет фрагменты по желанию.

Таким образом, родительская активность может обрабатывать все, что ему нужно, на верхнем уровне, и фрагменты никогда не должны знать. Если вам нужно сделать это переключение фрагмента, но хотите, чтобы он находился внутри другого фрагмента, вы можете сделать то же самое. Просто обратите внимание, что вы должны добавлять вложенные фрагменты программно, потому что вложенные фрагменты xml не поддерживаются. См. this for a fragment switching code example.

+0

Я попытался создать интерфейс прослушивателя в фрагменте и сделать действие реализацией этого интерфейса. Однако для прослушивателя не существует способа запуска. Я буду играть с предложениями здесь ... – avrono

+0

Я попытался получить представление в 'onCreate' Activity и setOnClickListener для частного анонимного onclicklistener, но это, похоже, не вызвано .... – avrono

+0

Хорошо, я я решил вызвать 'performClick' из' onTouchEvent', чтобы вызвать событие щелчка (очевидно, захвачен 'onTouchEvent') – avrono

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