2015-11-25 3 views
-3

У меня есть пользовательский макет:Android: findViewById (R.id.listView) возвращает нуль

taskview.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/listView" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 
</RelativeLayout> 

Моя деятельность выглядит следующим образом:

DaysList .java

public class DaysList extends Activity { 

    String []data= {"Wake up", "Take a shit", "Bath", "Feed your belly"}; 
    ListView listView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);    
    } 

    public void showTask(View view){ 

     listView= (ListView)findViewById(R.id.listView); 
     ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.task_row, R.id.textView, data); 
     listView.setAdapter(adapter); 
    } 

} 

showTask - это функция прослушивателя, которая прослушивает событие onClick. Я не знаю, почему я получаю исключение NullPointerException для findViewById (R.id.listview).

Btw, я новичок в Android, поэтому я не уверен, что я чего-то не хватает или нет.

EDIT: У меня есть 2 макета, activity_main.xml есть несколько кнопок. Всякий раз, когда кто-то нажимает на эти кнопки, вызывается метод showTask.

DaysList - это активность, связанная с activity_main.xml, так как это моя первая страница приложения. Вот почему я не могу изменить его с помощью taskview.xml.

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:background="#F44336" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context=".DaysList"> 


     <ImageView 
      android:id="@+id/mon" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:layout_marginRight="5sp" 
      android:src="@drawable/mon" 
      android:adjustViewBounds="true" 
      /> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="3" 
      android:background="#F44336" 
      android:fontFamily="sans-serif" 
      android:paddingBottom="15sp" 
      android:paddingTop="15sp" 
      android:paddingLeft="25sp" 
      android:text="Monday" 
      android:textColor="#E8F5E9" 
      android:textSize="34sp" 
      android:onClick="showTask"/> 
    </LinearLayout> 


Thanks!! 
+0

Почему вы тратите свое время, дорогая. Просто посмотрите, что ваш 'activity_main' xml имеет' listview' ?? Вы определили неправильный 'XML', измените свой xml с помощью' taskview.xml' –

+0

Вы должны установить R.layout.taskview в onCreate, поскольку listview находится в этом XML-файле –

ответ

2
setContentView(R.layout.activity_main); 

в

setContentView(R.layout.taskview); 

потому, что вы устанавливаете неправильный файл XML. И использовать это в методе onCreate

+0

. Добавьте свой R.layout.activity_main – Pavya

+0

, вы можете добавить listview в вашем activity_main и onclick listener установите его видимость – Pavya

+0

yes 1) отрегулируйте visibilty 2) создайте другое действие на вашем клике – Pavya

0

Try это,

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.taskview); 

    listView= (ListView)findViewById(R.id.listView);   
} 
+0

Я поставил listView = (ListView) findViewById (R.id.Посмотреть список); в onCreate, и попытался, но все же он бросал NPE. –

+0

Эй, попробуйте обновленный ответ, так как я обнаружил ошибку, что ваш список находится в классе taskview.xml, и вы вставляете класс activity_main. –

+0

Это решит ваш запрос. –

2

получить ListView в OnCreate метод, и вы не вызвали showTask а

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    listView= (ListView)findViewById(R.id.listView); 
    showTask();   
} 

и удалить его из метода showTask

+0

не работает –

+0

какая ошибка вы получаете в своем журнале –

0

Ваш ListView находится в taskview.xml

Так используйте setContentView(R.layout.taskview);

0

Используйте параметр просмотра заданного в методе showTask найти ваш идентификатор Что-то вроде этого

listView= (ListView)view.findViewById(R.id.listView); 
Смежные вопросы