2013-06-20 5 views
2
public class MainFragment extends Fragment { 
    public static final String TAG = MainFragment.class.getSimpleName(); 
    private static final String ABOUT_SCHEME = "settings"; 
    private static final String ABOUT_AUTHORITY = "main"; 
    public static final Uri ABOUT_URI = new Uri.Builder().scheme(ABOUT_SCHEME).authority(ABOUT_AUTHORITY).build(); 

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

     View v = inflater.inflate(R.layout.mainbutton, container, false); 

     return v; 
    } 

} 

По ссылке ниже: How to handle button clicks using the XML onClick within FragmentsonClickListener не работает в фрагменте

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

источник не работает тоже.

+2

Там нет причин почему вторая половина кода не должна работать, если кнопка не найдена, которая бы выбрала исключение NullPointerException. Первый раздел кода бесполезен. – JRomero

+1

Что Дж. Ромеро сказал точно. Код выглядит точно так, как должен. Как вы уверены, что ваш прослушиватель кликов не запускается? – dymmeh

+0

Кроме того, вы могли бы разместить весь макет (xml), может возникнуть проблема с расслоением. – JRomero

ответ

-1

Попробуйте так:

Button b = (Button) v.findViewById(R.id.StartButton); 
b.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         /*Your code*/ 
         } 
       }); 
4

@ J.Romero прав. Попробуйте этот код, я меняю метод onClick и добавляю журнал отладки.

public class StartFragment extends Fragment implements OnClickListener { 

    private static final LOG_TAG = "com.example.activity" 

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

     View v = inflater.inflate(R.layout.fragment_start, container, false); 

     if (v != null) { 
      Button mButton = (Button) v.findViewById(R.id.StartButton); 
      Log.d(TAG, "View is not null"); 

      if (mButton != null) { 
       b.setOnClickListener(this); 
       Log.d(TAG, "mButton is not null"); 
      } 
     } 

     return v; 
    } 

    @Override 
    public void onClick(View v) { 
     if (v == mButton) { 
      //do something 
     } 
    } 
} 
2

вы не можете получить доступ к элементу интерфейса в методе onCreateView - EVER

использование onActivityCreated метод, тот сказать фрагмент деятельность полностью создан и готов взаимодействовать

@Override 
     public void onActivityCreated(Bundle savedInstanceState) 
     { 
      // TODO Auto-generated method stub 
      super.onActivityCreated(savedInstanceState); 

      Button b = (Button) v.findViewById(R.id.StartButton); 
      b.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
            } 
          }); 
     } 
+0

Это сработало для меня. Спасибо Chaz. – Axwack

+0

приветствуется .... счастливое кодирование :) – chazrmani

+1

Фактически вы можете получить доступ к элементам пользовательского интерфейса в методе onCreateView. Я просто попробовал, и я получил EditText и сделал .setText (...) на нем, и он отлично работает. Однако событие click не работает. – Ted