有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android ListView未显示数据。。。在这方面我是个新手,肯定我做错了什么

这是我的第二个应用程序,也是第一个使用ListActivity的应用程序。某个地方出现了一些问题—活动(ShowWidget)显示—但列表为空

以下是我的ListActivity代码:

import 安卓.app.ListActivity;
import 安卓.media.MediaPlayer;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.ListView;
import 安卓.widget.Toast;

public class ShowWidget extends ListActivity  {
  DataProvider db = new DataProvider(ShowWidget.this);
  public static String sound;
  MediaPlayer mp = new MediaPlayer();
  @SuppressWarnings("unused")
  private ListView LV;

    @Override
    protected void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      Toast.makeText(getApplicationContext(), "Loading your settings.", Toast.LENGTH_SHORT).show();

      LV = (ListView)findViewById(安卓.R.id.list);
        setListAdapter(new ArrayAdapter<String>(this, 安卓.R.layout.simple_list_item_1, PENS));
        getListView().setTextFilterEnabled(true);

      // change to our configure view
      setContentView(R.layout.widget_show);

      /*db.open();
      Cursor cursor = db.getRecord(1);
      ShowWidget.sound  = cursor.getString(cursor.getColumnIndex("sound"));
      cursor.close();
      db.close();*/
    }

    static final String[] PENS = new String[]{
      "MONT Blanc", "Gucci", "Parker", "Sailor",
      "Porsche Design", "Rotring", "Sheaffer", "Waterman"
    };

    protected void onListItemClick(ListView l, View v, int position, long id) {
      super.onListItemClick(l, v, position, id);
      Object o = this.getListAdapter().getItem(position);
      String pen = o.toString();
      Toast.makeText(this, "You have chosen the pen: " + " " + pen, Toast.LENGTH_LONG).show();
    }

  public void play(){
    }
}

和我的布局:

<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:layout_width="fill_parent"
    安卓:layout_height="fill_parent"
    安卓:id="@+id/widgetShow">

    <ListView
    安卓:layout_width="0dp"
    安卓:layout_height="0dp"
    安卓:id="@安卓:id/list"
    安卓:layout_weight="1">

  </ListView>

</LinearLayout>

就像我说的,我在这里做错了什么-活动显示,但不是笔中存储的数据。任何正确方向的想法或观点都将不胜感激!如果问题不清楚,请评论,我将编辑问题以使其更清楚


共 (3) 个答案

  1. # 1 楼答案

    这是处理UI组件的顺序。首先,从默认布局(导入以实现)膨胀ListView,然后,基本上告诉Activity使用其他布局,称为R.layout.widget_show。因此,您在屏幕上看到的并不是您将适配器设置为的内容

    没有得到实际错误的原因是您正在扩展ListActivity,它定义了一个包含ListView的默认布局。在任何常规的Activity中,您都会得到一个NullPointerException,因为还没有设置内容视图,所以Activity不知道从何处膨胀视图

    按如下方式更改代码:

    @Override protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        // tell activity to use your custom layout:
        setContentView(R.layout.widget_show);      
        // set adapter etc   
        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, PENS));
        getListView().setTextFilterEnabled(true);
    }
    

    由于您在布局文件中用id @android:id/list声明了ListView(这也是使用ListActivity的一个要求),因此可以免费获得一些方便的方法,其中包括您不必手动膨胀ListView。因此,您可以在设置内容视图后使用getListView()

  2. # 2 楼答案

    尝试更改:

    setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, PENS));
    

    致:

    setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, PENS);
    
  3. # 3 楼答案

    尝试按如下方式编辑布局文件:

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