空白屏幕:ListView和BaseAdapter

时间:2014-03-22 00:53:49

标签: android listview baseadapter

我正在尝试在ListView中显示User类中的信息。当我运行应用程序时,我只得到一个空屏幕。我在activity_main.xml中使用了ListView,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView 
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</LinearLayout>

我有一个数据模型xml,它将作为列表中的每个项目充气。这个xml看起来像这样:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/textline"
    android:layout_width="fill_parent"
    android:layout_height="26dip"
    android:text="Description"
    android:textSize="12sp"
    android:textColor="@android:color/black" 

/>

我编写了ListAdapter,它扩展了BaseAdapter。我声明了一个ArrayList。我在ListAdapater的构造函数中填充了ArrayList。 ListAdapter的覆盖方法如下所示:

@Override
public int getCount() {
    return userList.size();
}

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

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

@Override
public View getView(int position, View view, ViewGroup parent) {

    if(view==null){
        Log.e("Info","Inflating view");
        inflater=LayoutInflater.from(parent.getContext());
        view=inflater.inflate(R.layout.data_model, parent,false);
    }
    User user=userList.get(position);
    TextView tv=(TextView)view.findViewById(R.id.textline);
    tv.setText(user.getName());

    return null;
}

MainActivity的onCreate()如下所示:

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

    ListView lv=(ListView)findViewById(R.id.listview);
    ListAdapter adapter=new ListAdapter();
    lv.setAdapter(adapter);

}

我不知道为什么我会得到空的白色屏幕。 另外,当我将Log()语句作为ListAdapter的每个方法的第一个语句时,我看到在LogCat中打印两次Log()语句。

任何有关解决方案的指示都会有所帮助。

3 个答案:

答案 0 :(得分:1)

Adapter.getView null,如果您要返回view,则需要返回{{1}}。

答案 1 :(得分:0)

getView方法为每个位置返回null。你需要回复你的观点。

答案 2 :(得分:0)

 @Override
 public View getView(int position, View view, ViewGroup parent) {

if(view==null){
    Log.e("Info","Inflating view");
    inflater=LayoutInflater.from(parent.getContext());
    view=inflater.inflate(R.layout.data_model, parent,false);
}
User user=userList.get(position);
TextView tv=(TextView)view.findViewById(R.id.textline);
tv.setText(user.getName());

return view;
}