片段列表视图自定义适配器错误
fragment listview custom adapter error
您好,我尝试在我的片段中实现列表视图,我使用了 this tutorial。
使用单个 activity 它对我来说工作正常,但不幸的是,当我想用片段实现时,当它被传递到我的自定义适配器时它崩溃了,我的日志中有错误,我认为问题是在控制器中,当我使用片段并尝试获取 getmImageLoader()
时实例为 null,但是对于 activity 单个它没关系......
也许你们可以帮助我一点,因为我是 android 的新手。这是我的代码。
我还继承了 fragment 中的 ListFragment 和 Adapter 中的 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);
片段视图(仅在框架布局中的列表):
<!-- 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
imo 的其余代码无关紧要。
感谢您的帮助和提前时间。
对于未来的用户,
问题是跳过教程的 "step 11":
Add the AppController.java class in AndroidManifest.xml to your
<application> tag using name property to execute this class on
application start.
<application
android:name="info.androidhive.customlistviewvolley.app.AppController" ../>
导致AppController.java
中mInstance
的空值。
所以调用 AppController.getmInstance().getmImageLoader();
将抛出 NullPointerException 因为 AppController.getmInstance()
总是 return 空对象。
您好,我尝试在我的片段中实现列表视图,我使用了 this tutorial。
使用单个 activity 它对我来说工作正常,但不幸的是,当我想用片段实现时,当它被传递到我的自定义适配器时它崩溃了,我的日志中有错误,我认为问题是在控制器中,当我使用片段并尝试获取 getmImageLoader()
时实例为 null,但是对于 activity 单个它没关系......
也许你们可以帮助我一点,因为我是 android 的新手。这是我的代码。
我还继承了 fragment 中的 ListFragment 和 Adapter 中的 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);
片段视图(仅在框架布局中的列表):
<!-- 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
imo 的其余代码无关紧要。 感谢您的帮助和提前时间。
对于未来的用户,
问题是跳过教程的 "step 11":
Add the AppController.java class in AndroidManifest.xml to your <application> tag using name property to execute this class on application start.
<application
android:name="info.androidhive.customlistviewvolley.app.AppController" ../>
导致AppController.java
中mInstance
的空值。
所以调用 AppController.getmInstance().getmImageLoader();
将抛出 NullPointerException 因为 AppController.getmInstance()
总是 return 空对象。