2016-07-21 2 views
0

У меня есть ImageButton во фрагменте, который открывается TabLayout в моем основном действии. Когда я пытаюсь получить ссылку на ImageButton в моей основной деятельности в onCreate(Bundle savedInstance):ImageButton is Null

playPauseButton = (ImageButton)findViewById(R.id.play_pause); 

возвращается в нуль. Фрагмент, который охватывает мой ImageButton, выглядит так:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/play_pause" 
    android:layout_gravity="center_horizontal" 
    /> 

Любые идеи о том, почему это возвращает null?

+1

Поскольку он находится в расположении вашего фрагмента, а не в данном виде деятельности. И 'findViewById' вызывается в макете Activity. Почему вы должны получить доступ к кнопке из Activity в любом случае? Получите доступ к нему во Фрагменте и установите соответствующие действия на нем. – Vucko

+0

Инициировать его в фрагменте, а затем setOnClickListener в самом фрагменте –

+0

Я думаю, что вам нужно использовать 'inflater' из 'public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)', чтобы извлечь вид фрагмента. –

ответ

2

Вы не можете получить представление внутри фрагмента из MainActivity прямо так, как это не является его представлением, оно включено в фрагмент, поэтому вы должны получить его из самого фрагмента после того, как он был создается (т.е. в методе onViewCreated()) и с экземпляром зрения созданным для фрагмента:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    // Declaring the View you want 
    ImageButton play_pause = (ImageButton) view.findViewById(R.id.play_pause); 

} 
+1

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

+0

Вы так приветствуетесь, я рад, что смогу помочь в решении вашей проблемы –

1

получить ссылку, как это с помощью GetView()

playPauseButton = (ImageButton) getView().findViewById(R.id.play_pause); 
0

Если вы расширяете Fragment средства следует использовать, как,

@Override 

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

    View rootView = inflater.inflate(R.layout.YOUR_LAYOUT_FILE_NAME, container, false); 
    ImageButton playPauseButton = (ImageButton)rootView.findViewById(R.id.play_pause); 


    return view; 

} 

Это может поможет вам