2014-09-29 4 views
0

Я создал пользовательский EditTextView, и я хочу вызвать фрагмент, когда пользовательский EditTextView сфокусировался.Как вызвать фрагмент из CustomView

Я пишу код вроде этого, но у меня есть ошибка при фрагменте вызова.

если (кто-то есть хорошая идея, чтобы позвонить Фрагмент из пользовательского View) {пожалуйста, научите меня();}

это мой код:

public class OriginalEditText extends EditText { 

    public OriginalEditText(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    public OriginalEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setText(""); 
     setHint("it is original"); 

     setOnFocusChangeListener(new OnFocusChangeListener() { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        // //////////////////////////////////////////// 
        // /I want to Call Fragment here. //////////// 
        // ////////////////////////////////////////// 
        Fragment fgm = null; 
        testFragment testFragment=new testFragment(); 
        FragmentManager manager=fgm.getFragmentManager();//null pointerException occurred here 
        FragmentTransaction transaction=manager.beginTransaction(); 

        transaction.add(R.id.originalEditText1,testFragment, "test"); 
        transaction.commit(); 
        // /////////////////////////////////////////////////////////////////////////////// 
        // /but above code not work.....How to call Fragment from CustomView //////////// 
        // ///////////////////////////////////////////////////////////////////////////// 


       } 

      } 
     }); 

    } 

    public OriginalEditText(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     // TODO Auto-generated constructor stub 
    } 

} 

ответ

0

Вы устанавливаете КОЖПО в нуль на две строки выше. Очевидно, вы получите исключение нулевого указателя, когда будете писать fgm.getFragmentManager(). Я предлагаю вам установить onFocusListener вашего пользовательского представления внутри действия/фрагмента.

Для того, чтобы обеспечить связь между активностью и фрагментами, вы можете по этой ссылке: link

0

Я думаю, что часть вашей проблемы может исходить от вашего понимания FragmentManager.
В справочных документах FragmentManager описывается как «Интерфейс для взаимодействия с объектами фрагмента внутри Activity».

В вашем коде, вы предоставляете ваши OnFocusChangeListener как анонимный внутренний класс, и создать Fragment называется fgm, который вы установили в null. Поэтому, когда вы вызываете fgm.getFragmentManager(), вы фактически пытаетесь получить FragmentManagerFragment, который еще не был назначен Activity.

Что вы можете сделать, это убедиться, что вы передаете Activity как Context всякий раз, когда вы создаете экземпляр своего настраиваемого текста. Затем вы можете использовать ссылку на это Activity для получения FragmentManager.

public class OriginalEditText extends EditText { 

    private Activity mActivity; 

    public OriginalEditText(Context context) { 
     super(context); 
     castContextAsActivity(context); 
    } 

    public OriginalEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     castContextAsActivity(context); 
     setText(""); 
     setHint("it is original"); 

     setOnFocusChangeListener(new OnFocusChangeListener() { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        if (mActivity != null) { 
         FragmentManager manager = mActivty.getFragmentManager(); 
         ... 
         // You now have your FragmentManager and can do what you want with it. 
        } 
       } 

      } 
     }); 

    } 

    private castContextAsActivity(Context context) { 
     try{ 
      // Try and cast the supplied context as an Activity 
      mActivity = (Activity) context; 
     } catch (ClassCastException e) { 
      // If we've caught an exception, then the supplied context was not an Activity. 
      Log.e("OriginalEditText", "Error: You must supply an Activity as the Context!"); 
     }   
    } 
    ... 
} 
+0

СПАСИБО! ur Ответ действительно полезен !! –

+0

Счастливые помочь. Я вижу, что вы относительно новичок в StackOverflow. Если ответ будет полезен, попробуйте его проголосовать. Если ответ правильный, отметьте его принятым (зеленый галочка). –

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