android – 为什么我的ListView没有显示任何内容?

前端之家收集整理的这篇文章主要介绍了android – 为什么我的ListView没有显示任何内容?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Android中有一个非常基本的ListView,并设置了一个非常基本的适配器.我的问题是列表视图不显示任何东西,不管适配器和notifyDataSetChanged();

这是我的代码
XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <TextView android:text="@string/app_name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  ></TextView>
  <ListView android:id="@+id/selectView"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
    </ListView>
</RelativeLayout>

活动代码

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

import com.androidcourse.phonemapper.R;
import com.androidcourse.phonemapper.model.SelectViewAdapter;

public class SelectActivity extends Activity {

    private ListView mListView;

    private SelectViewAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        setContentView(R.layout.select_activity);
        initializeListView();

    }

    private void initializeListView() {
        mListView = (ListView) findViewById(R.id.selectView);
        mAdapter = new SelectViewAdapter(this);
        mListView.setAdapter(mAdapter);
        mAdapter.notifyDataSetChanged();
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}

和适配器代码

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class SelectViewAdapter extends BaseAdapter {

    private Context mContext;
    private TextView mMockTextView;

    public SelectViewAdapter(Context cnt) {
        mContext = cnt;
        mMockTextView = new TextView(mContext);
        mMockTextView.setText("Test text");
        mMockTextView.setBackgroundColor(Color.CYAN);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public Object getItem(int position) {
        return mMockTextView;
    }

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

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        return mMockTextView;
    }

}

问题是屏幕上没有显示任何内容.黑屏(和XML中的第一个文本视图)都是我得到的.我看不到mockTextView及其文本.显然我做的事情相当错了,但我不明白什么.

解决方法

我可以想到的几件事

首先,您的RelativeLayout没有相对的定位信息.我会假设你的意思是将它放在一个LinearLayout中,方向设置为垂直于你所描述的方向.我的猜测是,该列表实际上并没有被绘制,因为它甚至没有被锚定到当前的RelativeLayout中.如果您使用RelativeLayout,请确保在app_name TextView上放置一个ID,并通过layout_below将ListView放置在其下.

LinearLayout解决方

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <TextView android:text="@string/app_name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  ></TextView>
  <ListView android:id="@+id/selectView"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
    </ListView>
</LinearLayout>

RelativeLayout解决方案:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <TextView
  android:id="@+id/app_name_text" 
  android:text="@string/app_name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentTop="true"
  ></TextView>
  <ListView android:id="@+id/selectView"
    android:layout_below="@id/app_name_text"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
    </ListView>
</RelativeLayout>

接下来,您的getView()将为所有3个索引返回相同的textView.在多个索引上显示相同的视图并不是一个问题,但是列表大小为3,我敢打赌屏幕可以同时显示所有三个.而且由于View不能一次在一个以上的位置,所以我实际上会期望这样做会失败,所以我怀疑它甚至还没有得到这个代码.尝试为每个getView()创建一个新的TextView.另外你的MockTextView没有它自己的布局参数.所以在listView单元格中放置它可能也不会发生.所以你可以给它类型为AbsListView.LayoutParams(WRAP_CONTENT,WRAP_CONTENT)的参数.再次,如果它得到原始代码,我会期望这是错误的.

getView()整理:

@Override
    public View getView(int position,ViewGroup parent) {
       if(convertView == null) {
          TextView textView = new TextView(parent.getContext());
          textView.setText("Position is:"+position);
          textView.setBackgroundColor(Color.CYAN);
          textView.setLayoutParams(new AbsListView.LayoutParams(WRAP_CONTENT,WRAP_CONTENT);
          convertView = textView;
        }
        return mMockTextView;
    }

最后,列表的wrap_content高度有时可能会有问题.我不知道所有的情况.如果最终更改为LinearLayout,请尝试将列表视图的layout_height设置为0,然后设置layout_weight = 1.这迫使线性布局将其膨胀到更多的空间.

LinearLayout重量解决方案:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <TextView android:text="@string/app_name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  ></TextView>
  <ListView android:id="@+id/selectView"
    android:layout_weight="1"
    android:layout_height="0dp"
    android:layout_width="wrap_content">
    </ListView>
</LinearLayout>

猜你在找的Android相关文章