Страница 1 из 1
ListView nullpointer
Добавлено: 17 янв 2013, 19:56
Makute
nullpointer exception при инициализации списка
Код: Выделить всё
ListView list = (ListView)findViewById(R.id.FirstList);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.sample_item, R.id.textView1, values);//Взято из примера, с любым кодом ошибка
list.setAdapter(adapter);
Адаптер
Код: Выделить всё
public class first_list_adapter extends BaseAdapter {
private LayoutInflater mLayoutInflater;
public first_list_adapter(Context ctx) {
mLayoutInflater = LayoutInflater.from(ctx);
}
public int getCount() {
return elements.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)convertView = mLayoutInflater.inflate(R.layout.sample_item, null);
TextView sign = (TextView) convertView.findViewById(R.id.textView1);
return convertView;
}
}
sample_item
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PACPAC"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
экран с listview
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/FirstList"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
Перепробовал все, разные адаптеры, разные листы, в общем все, ошибка все равно имеет место.
Подскажите как решить или где накосячил, заранее премного благодарен
Re: ListView nullpointer
Добавлено: 17 янв 2013, 21:48
rezak90
на какой строке хоть нулл вылазит?
Из предоставленного лишь видно:
- идёт инициализация листа ListView list = (ListView)findViewById(R.id.SecondList); , а в хмл файле совсем другой айди android:id="@+id/FirstList"
- в адаптере есть return elements.size(); , где переменная elements нигде не объявлена (по крайней мере в адаптере)
Re: ListView nullpointer
Добавлено: 18 янв 2013, 15:31
Makute
rezak90 писал(а):на какой строке хоть нулл вылазит?
Из предоставленного лишь видно:
- идёт инициализация листа ListView list = (ListView)findViewById(R.id.SecondList); , а в хмл файле совсем другой айди android:id="@+id/FirstList"
- в адаптере есть return elements.size(); , где переменная elements нигде не объявлена (по крайней мере в адаптере)
Elements - int массив
Код: Выделить всё
ArrayList<Integer> elements = new ArrayList<Integer>();
По поводу инициализации листов - перепутал, не то скопировал. 2 абслютно одинаковых листа, лишь названия разные. Исправил.
Re: ListView nullpointer
Добавлено: 18 янв 2013, 18:26
Mikhail_dev
Так всё же главный вопрос. Где стектрейс ошибки? Где вылазит исключение? Просьба выложить не указание на строку, а именно стектрейс.
Re: ListView nullpointer
Добавлено: 18 янв 2013, 18:55
Makute
01-18 21:49:28.289: E/AndroidRuntime(13050): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.chameleon.assistant/com.chameleon.assistant.MainActivity}: java.lang.NullPointerException
01-18 21:49:28.289: E/AndroidRuntime(13050): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-18 21:49:28.289: E/AndroidRuntime(13050): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-18 21:49:28.289: E/AndroidRuntime(13050): at com.chameleon.assistant.MainActivity.init(MainActivity.java:57)[ list.setAdapter(adapter);]
Код: Выделить всё
package com.chameleon.assistant;
import java.util.ArrayList;
import android.R.integer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.content.Context;
public class MainActivity extends FragmentActivity {
ArrayList<Integer> elements = new ArrayList<Integer>();
first_list_adapter first_adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main_screen);
init();//Запуск разметки экрана
}
public void init()
{
//---------------------------------------------------------------------------------------------------
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); //Полноэкранный режим
ListView list = (ListView)findViewById(R.id.SecondList);
elements.add(1);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.sample_item, R.id.textView1, values);
list.setAdapter(adapter);
}
//adapter
public class first_list_adapter extends BaseAdapter {
private LayoutInflater mLayoutInflater;
public first_list_adapter(Context ctx) {
mLayoutInflater = LayoutInflater.from(ctx);
}
public int getCount() {
return 1;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)convertView = mLayoutInflater.inflate(R.layout.sample_item, null);
TextView sign = (TextView) convertView.findViewById(R.id.textView1);
sign.setText("123");
return convertView;
}
}
}
Активити
Re: ListView nullpointer
Добавлено: 18 янв 2013, 20:53
Mikhail_dev
Не очень понял в чем проблема, но думаю что она довольно очевидная. Думаю что-то не атк с адаптером. Измени адаптер на уже существиющий в андроиде. Если прокатит, то надо смотреть что не так с адаптером.
Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
И еще пару вещей:
1. А для чего указывать целый класс адаптера (public class first_list_adapter extends BaseAdapter), если он нигде не создается? Переменная зарезервирована, но используется обычный ArrayAdapter
2. Советую придерживаться правил именования, а именно - класс всегда с большой буквы. (public class FirstListAdapter extends BaseAdapter)
Если это какой-то пример, то это плохой пример.
Re: ListView nullpointer
Добавлено: 19 янв 2013, 08:27
Makute
no-- писал(а):Не очень понял в чем проблема, но думаю что она довольно очевидная. Думаю что-то не атк с адаптером. Измени адаптер на уже существиющий в андроиде. Если прокатит, то надо смотреть что не так с адаптером.
Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
И еще пару вещей:
1. А для чего указывать целый класс адаптера (public class first_list_adapter extends BaseAdapter), если он нигде не создается? Переменная зарезервирована, но используется обычный ArrayAdapter
2. Советую придерживаться правил именования, а именно - класс всегда с большой буквы. (public class FirstListAdapter extends BaseAdapter)
Если это какой-то пример, то это плохой пример.
Это пример, взятый из интернета. first_list_adapter используется, но с ним nullpointer. Взял пример, дабы проверить - но с примером тоже nullpointer.
За паттерн именования классов - спасибо, буду придерживаться.
Re: ListView nullpointer
Добавлено: 19 янв 2013, 11:06
Mikhail_dev
Если и мой пример не прокатил, то тут проблема остается только в инициализации списка ListView. Что приводит к этому - не понятно на первый взгляд. Тут лучше всего получить весь код программы.
Re: ListView nullpointer
Добавлено: 19 янв 2013, 13:00
rezak90
да мне кажется он использует айдишник с другого лейаута, вот и нулл вылазит
Re: ListView nullpointer
Добавлено: 19 янв 2013, 13:07
Mikhail_dev
А, да, точно! Думаю что наверняка из-за этого.
Проверь с какой активности ID.
Re: ListView nullpointer
Добавлено: 19 янв 2013, 15:23
Makute
no-- писал(а):А, да, точно! Думаю что наверняка из-за этого.
Проверь с какой активности ID.
У меня есть ViewPager, в нем 3 страницы, на каждой странице - листвью. Все они инициализируются раньше, чем листы и адаптеры к ним. Если проблема в этом - как исправить?
Re: ListView nullpointer
Добавлено: 20 янв 2013, 19:33
Makute
Итак, проблема в ViewPager. Если работать с листом непосредственно на главной активити, без ViewPager, все отлично. Если же использовать его - нуллпоинтер. Что делать?
Re: ListView nullpointer
Добавлено: 20 янв 2013, 22:00
neoksi
Makute
Прочитайте внимательно статью:
http://startandroid.ru/ru/uroki/vse-uro ... cycle.html
Я думаю, после неё вы поймете, как правильно готовить фрагменты. Активити и АктивитиФрагмент это не одно и тоже, хотя и похоже.
Re: ListView nullpointer
Добавлено: 21 янв 2013, 19:19
Makute
Хорошо, спасибо, прочел, понял. Проблема не решилась.
Фрагмент:
Код: Выделить всё
public class FirstFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.first_screen, container, false);
ListView list = (ListView) view.findViewById(R.id.FirstList);
return view;
}
}
ViewPagerAdapter:
Код: Выделить всё
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FirstFragment();
default:
return null;
}
}
@Override
public int getCount() {
return 1;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0: return "1";
}
return null;
}
}
Все так же не могу из главного класса взимодействовать с элементами фрагментов. Как их инициализировать, или что ещё нужно с ними делать? В фрагменте опущены лишь необязательные методы, вроде onresume
Re: ListView nullpointer
Добавлено: 21 янв 2013, 20:40
rezak90
Все так же не могу из главного класса взаимодействовать с элементами фрагментов.
это вы имеете в виду с активити взаимодействовать с фрагментами?
Re: ListView nullpointer
Добавлено: 21 янв 2013, 21:18
neoksi
Makute,
Где ошибка то происходит теперь?
Нульпоинт при инициализации ListView явно должен был уйти.
Лог ошибки в студию, мы тут не телепаты.
Re: ListView nullpointer
Добавлено: 22 янв 2013, 12:58
Makute
rezak90 писал(а):Все так же не могу из главного класса взаимодействовать с элементами фрагментов.
это вы имеете в виду с активити взаимодействовать с фрагментами?
из fragment activity взаимодействовать с содержимым фрагментов
Re: ListView nullpointer
Добавлено: 22 янв 2013, 18:49
rezak90
из fragment activity взаимодействовать с содержимым фрагментов
если с кода создаёте фрагмент то у вас есть объект этого фрагмента и вытаскивайте и делайте что хотите, если в xml задаёте то тоже самое только получаем объект из хмл