Java 列表视图没有';在我的活动中没有显示

Java 列表视图没有';在我的活动中没有显示,java,android,listview,Java,Android,Listview,我对android不是很有经验,我在MainActivity的布局中创建了一个listView,在我的列表中的每一行都创建了一个包含两个文本视图和一个图像视图的布局(布局的名称=列表的视图),并且我创建了MyContact类,它包括三个成员:String name、String phone、int Id。 我还创建了CustomAdapter类。最后,我将CostumAdapter设置为我的listView。 当我运行代码时,它崩溃了; Android Monitor在CustomAdapter

我对android不是很有经验,我在MainActivity的布局中创建了一个listView,在我的列表中的每一行都创建了一个包含两个文本视图和一个图像视图的布局(布局的名称=列表的视图),并且我创建了MyContact类,它包括三个成员:String name、String phone、int Id。 我还创建了CustomAdapter类。最后,我将CostumAdapter设置为我的listView。 当我运行代码时,它崩溃了; Android Monitor在CustomAdapter.java中指出:

rowView = inflater.inflate(R.layout.view_of_list, parent, false);
出现以下错误:

尝试对空对象引用调用虚拟方法“android.view.view android.view.LayoutInflater.inflate(int,android.view.ViewGroup,boolean)”

我的错在哪里

activity_main.xml

<android.widget.RelativeLayout 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"
tools:context="com.list.steve.list.MainActivity">

<ListView
    android:layout_width="368dp"
    android:layout_height="495dp"
    tools:layout_editor_absoluteY="8dp"
    tools:layout_editor_absoluteX="8dp"
    android:id="@+id/list_view"/>
</android.widget.RelativeLayout>
CustomAdapter.java

public class CustomAdapter extends ArrayAdapter {
private ArrayList mycontacts;
private Mycontact contact;
private LayoutInflater inflater;
private ViewHolder holder;
public CustomAdapter(Context context, ArrayList contact ) {
    super(context, R.layout.view_of_list, contact);
    this.mycontacts = contact;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View rowView = convertView;
    if(convertView == null) {
        rowView = inflater.inflate(R.layout.view_of_list, parent, false);
        holder.tv_name = (TextView) rowView.findViewById(R.id.tv_name);
        holder.tv_phone = (TextView) rowView.findViewById(R.id.tv_phone);
        holder.img_profile = (ImageView) rowView.findViewById(R.id.img_profile)
        rowView.setTag(holder);
    }else{
        holder = (ViewHolder) rowView.getTag();
    }
    contact = (Mycontact)mycontacts.get(position);
    holder.tv_name.setText(contact.getName());
    holder.tv_phone.setText(contact.getPhone());
    holder.img_profile.setImageResource(contact.getId());
    return rowView;
}

public class ViewHolder{
    TextView tv_name;
    TextView tv_phone;
    ImageView img_profile;

}
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
Mycontact contact;
ArrayList<Mycontact> mycontacts;
ListView listView;
CustomAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mycontacts = new ArrayList<Mycontact>();
    adapter = new CustomAdapter(this,mycontacts);
    listView = (ListView) findViewById(R.id.list_view);
    listView.setAdapter(adapter);

}
public void AddContact(){
    mycontacts.add(new Mycontact("steve","09012345678",R.drawable.one));
    mycontacts.add(new Mycontact("hasan","091112345678",R.drawable.two));
    mycontacts.add(new Mycontact("hosein", "09151338089",R.drawable.three));
}
public类MainActivity扩展了AppCompatActivity{
接触接触;
ArrayList mycontacts;
列表视图列表视图;
自定义适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mycontacts=newArrayList();
adapter=新的CustomAdapter(这是mycontacts);
listView=(listView)findViewById(R.id.list\u视图);
setAdapter(适配器);
}
public void AddContact(){
添加(新的Mycontact(“steve”,“09012345678”,R.drawable.one));
添加(新的Mycontact(“hasan”,“091112345678”,R.drawable.two));
添加(新的Mycontact(“hosein”,“09151338089”,R.drawable.three));
}
}

在列表中设置适配器之前,应该调用AddContact()方法。在构造函数中初始化充气机,如下所示

public CustomAdapter(Context context, ArrayList contact ) {
    super(context, R.layout.view_of_list, contact);
    this.mycontacts = contact;
    this.inflater = LayoutInflater.from(context);

}
您还应该像这样在getView()方法中构造viewHolder类

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View rowView = convertView;
    holder = new ViewHolder();
    if(convertView == null) {
        rowView = inflater.inflate(R.layout.view_of_list, parent, false);
        holder.tv_name = (TextView) rowView.findViewById(R.id.tv_name);
        holder.tv_phone = (TextView) rowView.findViewById(R.id.tv_phone);
        holder.img_profile = (ImageView) rowView.findViewById(R.id.img_profile)
        rowView.setTag(holder);
    }else{
        holder = (ViewHolder) rowView.getTag();
    }
    contact = (Mycontact)mycontacts.get(position);
    holder.tv_name.setText(contact.getName());
    holder.tv_phone.setText(contact.getPhone());
    holder.img_profile.setImageResource(contact.getId());
    return rowView;
}
在列表中设置适配器之前,应该调用AddContact()方法。在构造函数中初始化充气机,如下所示

public CustomAdapter(Context context, ArrayList contact ) {
    super(context, R.layout.view_of_list, contact);
    this.mycontacts = contact;
    this.inflater = LayoutInflater.from(context);

}
您还应该像这样在getView()方法中构造viewHolder类

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View rowView = convertView;
    holder = new ViewHolder();
    if(convertView == null) {
        rowView = inflater.inflate(R.layout.view_of_list, parent, false);
        holder.tv_name = (TextView) rowView.findViewById(R.id.tv_name);
        holder.tv_phone = (TextView) rowView.findViewById(R.id.tv_phone);
        holder.img_profile = (ImageView) rowView.findViewById(R.id.img_profile)
        rowView.setTag(holder);
    }else{
        holder = (ViewHolder) rowView.getTag();
    }
    contact = (Mycontact)mycontacts.get(position);
    holder.tv_name.setText(contact.getName());
    holder.tv_phone.setText(contact.getPhone());
    holder.img_profile.setImageResource(contact.getId());
    return rowView;
}

我叫它,现在是崩溃。在customadapter.java的行中rowView=inflater.inflate(R.layput.view\u of_list,parent,false);我遇到了这个错误:尝试在空对象引用上调用虚拟方法“android.view.view android.view.LayoutInflater.inflate(int,android.view.ViewGroup,boolean)”,因为你的充气器是空的,你应该在构造函数中初始化它,就像这个公共CustomAdapter(上下文上下文,ArrayList联系人){super(context,R.layout.view_of_list,contact);this.mycontacts=contact;this.inflater=LayoutInflater.from(context);}当我这样做的时候,由于前一个原因,我从ViewHolder得到了新的错误,我调用了ViewHolder的构造函数,然后应用程序正确运行。tnxI调用它,现在它崩溃了。在customadapter.java的行中,rowView=inflater.inflate(R.layput.View\u of_list,parent,false);我遇到此错误:尝试在空对象引用上调用虚拟方法“android.view.view android.view.LayoutInflater.inflate(int,android.view.ViewGroup,boolean)”,因为充气器为空,所以应该在构造函数中初始化它,就像此公共CustomAdapter(上下文上下文,ArrayList联系人){super(context,R.layout.view_of_list,contact);this.mycontacts=contact;this.inflater=LayoutInflater.from(context);}当执行此操作时,由于前面的原因,我从ViewHolder收到了新错误,我调用了ViewHolder的构造函数,然后应用程序正确运行。tnx