0

Здравствуйте, я попытался реализовать listview в своем фрагменте, я использовал this tutorial.Ошибка списка пользовательского адаптера фрагмента

С одним действием он отлично работает для меня, но, к сожалению, когда я хочу реализовать его с фрагментом, он падает, когда он передается моему пользовательскому адаптеру, с ошибкой в ​​моем журнале, и я думаю, что проблема в контроллере, какой экземпляр null когда я использую фрагменты и пытаюсь получить getmImageLoader(), но с активностью в одиночку это нормально ...

Так что, ребята, вы могли бы немного помочь мне с тех пор, как я новичок в андроиде. вот мой код.

Также я унаследовать ListFragment в фрагменте и BaseAdapter на адаптере:

фрагмент кода:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_fridge, container, false); 

    listView = (ListView)v.findViewById(R.id.list_item1); 
    adapter=new Adapter(getActivity(),array); 
    listView.setAdapter(adapter); 

вид фрагмента (только список, который находится в framelayout):

 <!-- TODO: Update blank fragment layout --> 
<ListView 
    android:id="@+id/list_item1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:dividerHeight="5dp" 
    android:listSelector="@drawable/list_row_select"/> 

Контроллер:

public class AppController extends Application { 
public static final String TAG= AppController.class.getSimpleName(); 
private RequestQueue mRequestQueue; 
private ImageLoader mImageLoader; 
private static AppController mInstance; 
@Override 
public void onCreate() { 
    super.onCreate(); 
    mInstance=this; 
} 
public static synchronized AppController getmInstance(){ 
    return mInstance; 
} 
public RequestQueue getmRequestQueue() { 
    if(mRequestQueue==null){ 
     mRequestQueue= Volley.newRequestQueue(getApplicationContext()); 
    } 
    return mRequestQueue; 
} 
public ImageLoader getmImageLoader(){ 
    getmRequestQueue(); 
    if(mImageLoader==null){ 
     mImageLoader=new ImageLoader(this.mRequestQueue,new BitmapCache()); 
    } 
    return this.mImageLoader; 
} 

и адаптер:

public class Adapter extends BaseAdapter { 
    private LayoutInflater inflater; 
    private Activity activity; 
    private List<Item> items; 
    ImageLoader imageLoader= AppController.getmInstance().getmImageLoader(); 
    public Adapter(Activity activity,List<Item> items){ 
     this.activity=activity; 
     this.items=items; 
    } 
    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return items.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(inflater==null){ 
      inflater=(LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 
     if(convertView ==null){ 
      convertView=inflater.inflate(R.layout.custom_layout,null); 
     } 
     if(imageLoader==null) 
      imageLoader=AppController.getmInstance().getmImageLoader(); 
     NetworkImageView imageView= (NetworkImageView) convertView.findViewById(R.id.image_view); 
     TextView title= (TextView) convertView.findViewById(R.id.tv_title); 
     TextView rate= (TextView) convertView.findViewById(R.id.tv_rate); 
     TextView genre= (TextView) convertView.findViewById(R.id.tv_genre); 
     TextView year= (TextView) convertView.findViewById(R.id.tv_year); 
     //getting data for row 
     Item item=items.get(position); 
     imageView.setImageUrl(item.getImage(), imageLoader); 
     //title 
     title.setText(item.getTitle()); 
     //rate 
     rate.setText(String.valueOf(item.getRate())); 
     String genreStr=""; 
     for(String str: item.getGenre()){ 
      genreStr +=str + ","; 
     } 
     genreStr = genreStr.length() >0 ? genreStr.substring(0, genreStr.length() - 2) : genreStr; 
     genre.setText(genreStr); 
     //year 
     year.setText(String.valueOf(item.getYear())); 

     return convertView; 
    } 
} 

ошибка

java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.toolbox.ImageLoader com.example.marius.mykitchen.Controllers.AppController.getmImageLoader() on a null object reference 

Остальная часть кода имо не имеет большого значения. Спасибо за вашу помощь и заблаговременно.

+0

Возможный дубликат [Что такое Исключение нулевого указателя и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) –

+0

Я знаю, что такое исключение из null-указателя, но теперь это похоже на разницу между действиями и фрагментами и как избежать этих вещей, изменяя некоторые из кода, который подходит для фрагментов, а не для действий. :( – Marius

+0

Ну, вы должны добавить немного больше кода и указать, в какой строке находится нулевой указатель. В вашем сообщении нет кода волейбола –

ответ

1

Для будущих пользователей,

Проблемы пропускали "шаг 11" учебника:

Добавить класс AppController.java в AndroidManifest.xml к вашему < приложения> тега с помощью name для выполнения этого класса по началу работы приложения .

<application 
     android:name="info.androidhive.customlistviewvolley.app.AppController" ../> 

Что вызывает нулевую ценность mInstance в AppController.java.

Так вызова AppController.getmInstance().getmImageLoader(); выбросит NullPointerException, потому что AppController.getmInstance() всегда будет возвращать нулевой объект.

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

  • Нет связанных вопросов^_^