
我正在尝试使用自定义数组适配器在片段中填充ListVIEw.但是我在自定义数组适配器的getVIEw()方法中的方法findVIEwByID()上得到NullPointerException.
这是CustomAdapter.java:
package graph.prathya.com.materialdesign;import androID.app.Activity;import androID.content.Context;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ArrayAdapter;import androID.Widget.ImageVIEw;import androID.Widget.TextVIEw;/** * Created by Prathya on 5/19/2015. */ public class CustomAdapter extends ArrayAdapter<Post>{ Context context; int layoutID,singlerowimgID= R.ID.imgIcon; Post data[]=null; public CustomAdapter(Context context, int layoutID, Post data[]){ super(context, layoutID); this.layoutID = layoutID; this.data = data; this.context =context;}private class PostHolder{ ImageVIEw imgicon; TextVIEw Title;}@OverrIDepublic int getCount(){ return data.length;}@OverrIDepublic VIEw getVIEw(int position, VIEw convertVIEw,VIEwGroup parent){ PostHolder holder; LayoutInflater li = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if(convertVIEw == null){ li.inflate(layoutID,parent,false); holder = new PostHolder(); holder.imgicon = (ImageVIEw)convertVIEw.findVIEwByID(singlerowimgID); holder.Title =(TextVIEw)convertVIEw.findVIEwByID(R.ID.txtTitle); } else { holder = (PostHolder)convertVIEw.getTag(); } Post post = data[position]; holder.Title.setText(post.Title); holder.imgicon.setimageResource(post.imgicon); return convertVIEw;}}这是我的XML文件,它定义了ListFragment中单行的外观
singlerow.xml:
<?xml version="1.0" enCoding="utf-8"?><linearLayoutxmlns:androID="http://schemas.androID.com/apk/res/androID"androID:orIEntation="horizontal"androID:layout_wIDth="fill_parent"androID:layout_height="fill_parent"androID:padding="10dp"><ImageVIEw androID:ID="@+ID/imgIcon" androID:layout_wIDth="wrap_content" androID:layout_height="fill_parent" androID:gravity="center_vertical" androID:layout_alignParenttop="true" androID:layout_alignParentBottom="true" androID:layout_marginRight="15dp" androID:layout_margintop="5dp" androID:layout_marginBottom="5dp" /><TextVIEw androID:ID="@+ID/txtTitle" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:gravity="center_vertical" androID:layout_alignParenttop="true" androID:layout_alignParentBottom="true" androID:textStyle="bold" androID:textSize="22dp" androID:textcolor="#000000" androID:layout_margintop="5dp" androID:layout_marginBottom="5dp" />这是我的Fragment类:
Fragment1.java:
package graph.prathya.com.materialdesign;import androID.content.Context;import androID.os.Bundle;import androID.support.v4.app.Fragment;import androID.support.v4.app.ListFragment;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ListVIEw;/** * Created by Prathya on 5/19/2015. */public class Fragment1 extends ListFragment{ Post post[] = new Post[]{ new Post(R.drawable.passion,"Passion"), new Post(R.drawable.event,"Event"), new Post(R.drawable.project,"Project"), new Post(R.drawable.groupstudy,"Group Study")};@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment1,container,false);}@OverrIDepublic voID onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setlistadapter(new CustomAdapter(getActivity(), R.layout.singlerow, post));} }这是fragment1.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"androID:orIEntation="vertical" androID:layout_wIDth="match_parent"androID:layout_height="match_parent"androID:background="#ffaa00"> <ListVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:ID="@androID:ID/List" androID:layout_gravity="center_horizontal" />这是Post.java
package graph.prathya.com.materialdesign;/** * Created by Prathya on 5/19/2015. */public class Post {public int imgicon;public String Title;public Post(){ super();}public Post(int imgicon, String Title){ this.imgicon = imgicon; this.Title = Title;}}这是MainActivity.java
package graph.prathya.com.materialdesign;import androID.app.FragmentTransaction;import androID.support.v4.app.FragmentManager;import androID.support.v7.app.ActionBaractivity;import androID.os.Bundle;import androID.vIEw.Menu;import androID.vIEw.MenuItem;public class MainActivity extends ActionBaractivity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); addframent(); }public voID addframent(){ FragmentManager fragmentManager = getSupportFragmentManager(); androID.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment1 fm1 = new Fragment1(); fragmentTransaction.add(R.ID.sa,fm1); fragmentTransaction.commit();}}这是错误信息
05-19 19:26:13.362 18306-18306/graph.prathya.com.materialdesign
E/AndroIDRuntime﹕ FATAL EXCEPTION: main
Process: graph.prathya.com.materialdesign, PID: 18306
java.lang.NullPointerException: Attempt to invoke virtual method ‘androID.vIEw.VIEw androID.vIEw.VIEw.findVIEwByID(int)’ on a null
object reference
at graph.prathya.com.materialdesign.CustomAdapter.getVIEw(CustomAdapter.java:42)
at androID.Widget.AbsListVIEw.obtainVIEw(AbsListVIEw.java:2347)
at androID.Widget.ListVIEw.measureHeightOfChildren(ListVIEw.java:1270)
at androID.Widget.ListVIEw.onMeasure(ListVIEw.java:1182)
at androID.vIEw.VIEw.measure(VIEw.java:17554)
..
解决方法:
在CustomAdapter.java中,您必须为convertVIEw分配膨胀的布局:
convertVIEw = li.inflate(layoutID,parent,false);更新:
您必须将持有者设置为新增加的视图:
covnertVIEw.setTag(holder); 总结 以上是内存溢出为你收集整理的java – CustomArrayAdapter中的NullPointerException全部内容,希望文章能够帮你解决java – CustomArrayAdapter中的NullPointerException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)