2017-04-10 77 views
-1

我有一个Java类,它包含有关用户(名称,年龄,类,标记)的信息。我试图创建一个列表视图来显示不同的用户(只有他们的名字和年龄)。ListView在Android中不显示任何内容

出于某种原因,不显示列表视图。为什么?

MainActivity.java:为main_activity

public class UserAdapter extends BaseAdapter { 
private Context currentContext; 
private ArrayList<User> userList; 


public static class ViewHolder { 
    TextView uName; 
    TextView uAge; 
} 
public UserAdapter(Context context, ArrayList<User> user){ 
    currentContext = context; 
    userList = user; 
} 
public View getView(int i, View view, ViewGroup viewGroup) { 

    //If view not created, inflate the view 
    ViewHolder viewHolder; 
    if(view == null){ 
     viewHolder = new ViewHolder(); 
     LayoutInflater inflater = (LayoutInflater) currentContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     view = inflater.inflate(R.layout.user_item, null); 

     //attach the ViewHolder to this view 
     viewHolder = new ViewHolder(); 
     viewHolder.userName = (TextView) view.findViewById(R.id.uNameTextView); 
     viewHolder.userAge = (TextView) view.findViewById(R.id.uAgeTextView); 
     view.setTag(viewHolder); 
    } 
    else{ 
     //View already created 
     viewHolder = (ViewHolder) view.getTag(); 
    } 

    viewHolder.uName.setText(userList.get(i).getUserName()); 
    viewHolder.uAge.setText(userList.get(i).getUserAge()); 
    return view; 
} 

XML文件:

<ListView 
    android:id="@+id/userListView" 
    style="@style/Widget.AppCompat.ListView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="10dp" 
    android:visibility="visible" />` 

XML为每个用户列表项:

public class MainActivity extends AppCompatActivity { 

private ListView listView; 
private UserAdapter userAdapter; 
private ArrayList<User> userList; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    userList = new ArrayList<>(); 
    DefaultList(); //calls default list function, with dummy values 
    listView = (ListView) findViewById(R.id.userListView); 

    //Associating the adapter with the monster list 
    userAdapter = new userAdapter(this, userList); 
    listView.setAdapter(userAdapter); 
} 

public boolean onCreateOptionsMenu(Menu menu){ 
    return true; 
} 

//Initializes the list view with some default values, for testing purposes only 
private void DefaultList(){ 
    userList.add(new User("Nat", 17, "MBS", 4, "98")); 
    userList.add(new User("Dave", 27, "BIS", 1, "54")); 
    userList.add(new User("Gray", 21, "BIS", 2, "51")); 
    userList.add(new User("John", 20, "BIS", 1, "76")); 
} 
} 

列表视图定义适配器

<TextView 
    android:id="@+id/uNameTextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginStart="16dp" 
    android:layout_marginTop="20dp" 
    android:text="Name" /> 

    <TextView 
    android:id="@+id/uAgeTextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignStart="@+id/uNameTextView" 
    android:layout_below="@+id/uNameTextView" 
    android:text="Age" /> 

我正在使用Android Studio。

+0

Android监视器上的任何错误? – HaroldSer

+0

@ScottS在监视器上没有错误。当我运行应用程序时,它显示一个空白屏幕。 – user100000001

回答

2

添加此方法到您的适配器,它会正常工作。

@Override 
    public int getCount() { 
     return userList != null ? userList.size() : 0; 
    } 
+0

包括此声明已解决我的应用程序关闭 – user100000001

+0

检查userList是否为空。如果userList为null,那么您的应用程序将崩溃。为避免崩溃,您可以进行检查。查看更新后的答案。 –

0

您需要添加getCount将()方法在适配器:

利用getCount()函数返回的项目总数将显示在列表中 。它从数组列表大小()方法 或数组长度计数值。

例如,如果我们在 一个ArrayList元素的列表,我们必须显示在列表视图中的项目然后我们 可以使用尺寸功能和 则该整数的值是计数元件的总数由函数getCount()返回,如 所示。

@Override 
public int getCount() { 
    int count=arrayList.size(); //counts the total number of elements from the arrayList 
    return count;//returns the total count to adapter 
} 

检查您的网卡,在一个地方,你已经初始化你的TextView为:

viewHolder.userName = (TextView) view.findViewById(R.id.uNameTextView); 
viewHolder.userAge = (TextView) view.findViewById(R.id.uAgeTextView); 

等,

viewHolder.uName.setText(userList.get(i).getUserName()); 
viewHolder.uAge.setText(userList.get(i).getUserAge()); 

请修正这得到 结果。

+0

包括解决这个声明解决我的App force关闭 – user100000001

+0

你能分享logCat错误信息吗? –

+0

它说 - 致命的例外:主 进程:com.example.user101.StudentView,PID:26694 android.content.res.Resources $ NotFoundException:字符串资源ID#0x11 – user100000001

0

只需从if语句中取出这些行。我认为你的view第一次不是空的,这会造成麻烦。

LayoutInflater inflater = (LayoutInflater) currentContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

view = inflater.inflate(R.layout.user_item, null); 
viewHolder.userName = (TextView) view.findViewById(R.id.uNameTextView); 
viewHolder.userAge = (TextView) view.findViewById(R.id.uAgeTextView); 
+0

已经包含这个 – user100000001

+0

我更新了我的回答 –

0

覆盖getView方法

@Override 
     public View getView(int i, View view, ViewGroup viewGroup) { 

    //If view not created, inflate the view 
    ViewHolder viewHolder; 
    if(view == null){ 
     viewHolder = new ViewHolder(); 
     LayoutInflater inflater = (LayoutInflater) currentContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     view = inflater.inflate(R.layout.user_item, null); 

     //attach the ViewHolder to this view 
     viewHolder = new ViewHolder(); 
     viewHolder.userName = (TextView) view.findViewById(R.id.uNameTextView); 
     viewHolder.userAge = (TextView) view.findViewById(R.id.uAgeTextView); 
     view.setTag(viewHolder); 
    } 
    else{ 
     //View already created 
     viewHolder = (ViewHolder) view.getTag(); 
    } 

    viewHolder.uName.setText(userList.get(i).getUserName()); 
    viewHolder.uAge.setText(userList.get(i).getUserAge()); 
    return view; 
} 
+0

完成,同样的错误。没有列表视图可见。 – user100000001

+0

我想你应该检查你的代码。什么是MonsterAdapter?它是一个构造函数吗?但你的班级名称是UserAdapter – user7676575

+0

这是一个打字错误,对此感到抱歉。我纠正了这一点。 – user100000001

-1

替换:public class UserAdapter extends BaseAdapter {

通过该:public class UserAdapter extends ArrayAdapter<User>

和最好创建为用户在其它类的模型;

GoodLuck