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

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

这是我的代码
XML:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="wrap_content"
  5. android:layout_height="wrap_content">
  6. <TextView android:text="@string/app_name"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. ></TextView>
  10. <ListView android:id="@+id/selectView"
  11. android:layout_height="wrap_content"
  12. android:layout_width="wrap_content">
  13. </ListView>
  14. </RelativeLayout>

活动代码

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.widget.ListView;
  4.  
  5. import com.androidcourse.phonemapper.R;
  6. import com.androidcourse.phonemapper.model.SelectViewAdapter;
  7.  
  8. public class SelectActivity extends Activity {
  9.  
  10. private ListView mListView;
  11.  
  12. private SelectViewAdapter mAdapter;
  13.  
  14. @Override
  15. public void onCreate(Bundle savedState) {
  16. super.onCreate(savedState);
  17. setContentView(R.layout.select_activity);
  18. initializeListView();
  19.  
  20. }
  21.  
  22. private void initializeListView() {
  23. mListView = (ListView) findViewById(R.id.selectView);
  24. mAdapter = new SelectViewAdapter(this);
  25. mListView.setAdapter(mAdapter);
  26. mAdapter.notifyDataSetChanged();
  27. }
  28.  
  29. @Override
  30. public void onResume() {
  31. super.onResume();
  32. }
  33. }

和适配器代码

  1. import android.content.Context;
  2. import android.graphics.Color;
  3. import android.view.View;
  4. import android.view.ViewGroup;
  5. import android.widget.BaseAdapter;
  6. import android.widget.TextView;
  7.  
  8. public class SelectViewAdapter extends BaseAdapter {
  9.  
  10. private Context mContext;
  11. private TextView mMockTextView;
  12.  
  13. public SelectViewAdapter(Context cnt) {
  14. mContext = cnt;
  15. mMockTextView = new TextView(mContext);
  16. mMockTextView.setText("Test text");
  17. mMockTextView.setBackgroundColor(Color.CYAN);
  18. }
  19.  
  20. @Override
  21. public int getCount() {
  22. return 3;
  23. }
  24.  
  25. @Override
  26. public Object getItem(int position) {
  27. return mMockTextView;
  28. }
  29.  
  30. @Override
  31. public long getItemId(int position) {
  32. return 3;
  33. }
  34.  
  35. @Override
  36. public View getView(int position,View convertView,ViewGroup parent) {
  37. return mMockTextView;
  38. }
  39.  
  40. }

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

解决方法

我可以想到的几件事

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

LinearLayout解决方

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:orientation="vertical"
  5. android:layout_width="wrap_content"
  6. android:layout_height="wrap_content">
  7. <TextView android:text="@string/app_name"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. ></TextView>
  11. <ListView android:id="@+id/selectView"
  12. android:layout_height="wrap_content"
  13. android:layout_width="wrap_content">
  14. </ListView>
  15. </LinearLayout>

RelativeLayout解决方案:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="wrap_content"
  5. android:layout_height="wrap_content">
  6. <TextView
  7. android:id="@+id/app_name_text"
  8. android:text="@string/app_name"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_alignParentTop="true"
  12. ></TextView>
  13. <ListView android:id="@+id/selectView"
  14. android:layout_below="@id/app_name_text"
  15. android:layout_height="wrap_content"
  16. android:layout_width="wrap_content">
  17. </ListView>
  18. </RelativeLayout>

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

getView()整理:

  1. @Override
  2. public View getView(int position,ViewGroup parent) {
  3. if(convertView == null) {
  4. TextView textView = new TextView(parent.getContext());
  5. textView.setText("Position is:"+position);
  6. textView.setBackgroundColor(Color.CYAN);
  7. textView.setLayoutParams(new AbsListView.LayoutParams(WRAP_CONTENT,WRAP_CONTENT);
  8. convertView = textView;
  9. }
  10. return mMockTextView;
  11. }

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

LinearLayout重量解决方案:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:orientation="vertical"
  5. android:layout_width="wrap_content"
  6. android:layout_height="wrap_content">
  7. <TextView android:text="@string/app_name"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. ></TextView>
  11. <ListView android:id="@+id/selectView"
  12. android:layout_weight="1"
  13. android:layout_height="0dp"
  14. android:layout_width="wrap_content">
  15. </ListView>
  16. </LinearLayout>

猜你在找的Android相关文章