2015-01-29 6 views
-4

Я новичок в android dev, я создал новый проект с активностью NavigationDrawer, я использую Android Studio. Проблема в том, что когда я добавляю кнопку и создаю OnClickListener, приложение подавляет, но без него оно запускается отлично. Посмотрите мой код ниже.
Я попытался добавить setContentView (View) но не помогаетAndroid setOnClickListener отключает мое приложение на avd

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); //comes by default 
    setContentView(R.layout.fragment_main); //added by me, but doesnt help 

    //referencing my button 
    btnTest = (Button)findViewById(R.id.btnTest); 

    mNavigationDrawerFragment = (NavigationDrawerFragment) 
      getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); 
    mTitle = getTitle(); 

    // Set up the drawer. 
    mNavigationDrawerFragment.setUp(
      R.id.navigation_drawer, 
      (DrawerLayout) findViewById(R.id.drawer_layout)); 

    //my event listeners 
    //when i highlight the below code everythin works..these block cause the crash 
    btnTest.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     } 
    }); 


} 

Я знаю, что другие должны были эти проблемы и решить ее, но я не в состоянии решить мои, пожалуйста, помогите, спасибо

+1

Просьба при условии, что LogCat – Jens

+0

покажет ваши ошибки. –

+0

java.lang.RuntimeException: не удалось запустить активность ComponentInfo {za.co.mybroker.mybroker/za.co.mybroker.mybroker.MainActivity}: java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.Button .setOnClickListener (android.view.View $ OnClickListener) 'на ссылке нулевого объекта –

ответ

0
setContentView(R.layout.activity_main); //comes by default 
setContentView(R.layout.fragment_main); //added by me, but doesnt help 

Не называйте setContentView дважды. Тот, который «приходит по умолчанию», предоставляется для вашего удобства, когда среда IDE генерирует класс Activity, если он вам не нужен, удалите его.

Во-вторых, вы устанавливаете фрагмент как View для своего Activity. Поэтому, если в этот макет включен R.id.btnTest, btnTest будет иметь значение NULL, следовательно, вызывает NullPointerException при вызове setOnClickListener.

удалить это:

setContentView(R.layout.fragment_main); 

и здесь

setContentView(R.layout.activity_main); 

убедитесь, что файл макета для вашего Activity, который называется activity_main.xml или заменить эту ссылку с именем файла макета.

EDIT: Я предполагаю, что вы выбрали вариант в AS, чтобы создать местозаполнитель в своей деятельности и фрагмент, который будет добавлен к нему. Вам нужно обработать кнопку в классе Fragment, и, что более важно, вам нужно добавить фрагмент в свою активность.

В вашей ActivityOnCreate, после установки на навигационном ящика):

Fragment newFragment = new ExampleFragment(); // replace ExampleFragment by your Fragment's class name 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.add(CONTENT_VIEW_ID, newFragment).commit(); // CONTENT_VIEW_ID is the id of the View in your Activity that should contain the Fragment. 

, а затем в вашем Fragment, переместить это onActivityCreated:

btnTest.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     } 
}); 

Вам нужно будет раздувать R.layout.fragment_main в onCreateView в вашем Fragment, и получить ссылку на btnTest от View вы раздуваете.

+0

Я пробовал с setContentView (R.layout.activity_main); не повезло. , когда я начинаю новый проект, 1. activity_main.xml 2.fragment_main.xml получает создан и btnTest в fragment_main.xml –

+0

Спасибо за ур ребята помогут, после долгих исследований я, наконец, решил it..and да @ 2Dee, вы на 100% правы. –

+0

Прохладный, молодец;) Могу ли я попросить вас принять/отложить ответы, которые помогли вам, отметить вопрос как закрытый? Заранее спасибо ;-) – 2Dee

0

Без LogCat Я бы сказал, что ваша проблема одна из следующих:

  1. btnTest не определен в вашем ActivityLayout (activity_main). Если это так, проверьте свой XML.

  2. Является ли ваш btnTest внутри вашего Fragment? Если это так, вы должны поместить OnClickListener в свой класс Fragment вместо вашего класса Activity.

BTW, второй setContentView не имеет никакого смысла, вы должны использовать только один.

Надеется, что это помогает

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