Android中的ListView不会填充

时间:2011-09-03 08:11:16

标签: android android-layout android-listview

ALL, 我有一点问题。 我正在尝试为我的应用程序创建以下布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView 
    android:id="@+id/output" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:layout_marginRight="40dp"
    android:layout_marginLeft="40dp"
    android:layout_marginBottom="12dp"
    android:layout_marginTop="50dp"
    android:scaleType="center"
    android:gravity="center_horizontal"
    layout_margin="1dp" 
    android:textSize="18sp" 
    android:text=" " 
     >
    </TextView>
    <ImageView
      android:id="@+id/next"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_marginRight="50dp"
      android:layout_marginTop="340dp"
      android:src="@drawable/next"
    />
    <ImageView
        android:id="@+id/save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/next"
        android:layout_marginRight="20dp"
        android:layout_marginTop="340dp"
        android:src="@drawable/save"
    />
    <ListView
        android:id="@+id/filenames"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:drawSelectorOnTop="false"
        android:layout_below="@id/output"
        android:layout_above="@+id/save"
    />
</RelativeLayout>

然后在我的来源中我使用以下内容:

    test = new ArrayList<String>();
    test.add( "a" );
    test.add( "b" );
    test.add( "c" );
    lv = (ListView) findViewById( R.id.filenames );
    adapter = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, test );
    lv.setAdapter( adapter );
    lv.setTextFilterEnabled( true );
    lv.setOnItemClickListener( new OnItemClickListener()
    {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            m_fileclicked = (String) lv.getItemAtPosition( position );
        }
    });

问题是我可以看到按钮和文本,但列表视图是黑色的(即空的)。

代码使用的是Acivity,而不是ListActivity。

我环顾四周 - 这里至少有3个关于如何在使用活动时填充列表视图的示例,但它们都使用了一些“疯狂”的布局。

我只需要显示一个简单的字符串。

有人可以帮忙吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

你的代码看起来不错。

我个人会先简化您的布局(纯粹作为测试),以防ListView隐藏或RelativeLayout正确展开。

我会将ListView放在一个简单的LinearLayout中作为测试,只需在展位中放置ListView拉伸高度和宽度:

  <ListView
        android:id="@+id/filenames"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

如果ListView然后正确显示,您知道问题与RelativeLayout代码有关,而不是适配器的绑定。

我猜你也在onCreate()方法中绑定了?

答案 1 :(得分:1)

首先,检查您的按钮ID 输出下一步

    android:layout_below="@id/output"
    android:layout_above="@+id/save"

另外一件事 m_fileclicked 你声明了它。是不是那个字符串。请更正。

您可以尝试以下简单示例:

public class ListExample extends Activity
{
 private ListView list;
 private String countries[]={"Nepal","India","China","Norway","germany"};
 @Override
 public void onCreate(Bundle icicle)
    {
   super.onCreate(icicle);
   setContentView(R.layout.main);
   list=(ListView)findViewById(R.id.ListView01);
   list.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 ,    countries));
  list.setTextFilterEnabled(true);
  list.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
      AlertDialog.Builder builder=new AlertDialog.Builder(ListExample.this);
      builder.setTitle(" List Item Demo");
      builder.setMessage("Your Selected Item is = "+list.getItemAtPosition(Position));
      builder.setPositiveButton("Ok", null);
    builder.show();
         }
      });
    }
 }

你的xml文件只有listview add和名字ListView01。

答案 2 :(得分:0)

我认为您对RelativeLayout属性没有明确的了解。这种布局使设计人员可以根据需要设计布局。此布局为开发人员提供了此类功能。请点击这些链接

http://android-pro.blogspot.com/2010/03/relative-layout.html

http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html

http://developer.android.com/guide/topics/ui/layout-objects.html

答案 3 :(得分:0)

您的TextView填充了父级的高度,而您的列表视图位于此文本视图下方。我认为这就是问题所在。您的@id/output文字视图应layout_height="wrap_content"

<TextView 
android:id="@+id/output" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"

更新

将listview的背景设置为红色,以便您可以清楚地区分它(只是测试。) 请从layout_marginTop中删除<ImageView>,然后使用layout_alignParentBottom="true"

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView 
    android:id="@+id/output" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" // should wrap content
    ......./>

    <ImageView
        android:id="@+id/next" 
        .......
        .......  // REMOVE MARGIN TOP
        android:layout_alignParentBottom="true" //align parent bottom
    />
    <ImageView
        android:id="@+id/save" 
        .......
        .......  // REMOVE MARGIN TOP
        android:layout_alignParentBottom="true"  //align parent bottom
    />
    <ListView
        android:id="@+id/filenames"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        .......... />
</RelativeLayout>