Java Android ListView不显示数据…在这方面非常新,而且某些I';我做错了什么事

Java Android ListView不显示数据…在这方面非常新,而且某些I';我做错了什么事,java,android,Java,Android,这是我的第二个应用程序,也是第一个使用ListActivity的应用程序。某个地方出现了一些问题—活动(ShowWidget)显示—但列表为空 以下是我的ListActivity代码: import android.app.ListActivity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; im

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

以下是我的ListActivity代码:

import android.app.ListActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.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(android.R.id.list);
        setListAdapter(new ArrayAdapter<String>(this, android.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(){
    }
}
导入android.app.ListActivity;
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.Toast;
公共类ShowWidget扩展ListActivity{
DataProvider db=新的数据提供者(ShowWidget.this);
公共静态弦声;
MediaPlayer mp=新的MediaPlayer();
@抑制警告(“未使用”)
私有ListView LV;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Toast.makeText(getApplicationContext(),“加载设置”,Toast.LENGTH\u SHORT.show();
LV=(ListView)findViewById(android.R.id.list);
setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,PENS));
getListView().setTextFilterEnabled(true);
//更改到我们的配置视图
setContentView(R.layout.widget_show);
/*db.open();
游标=db.getRecord(1);
ShowWidget.sound=cursor.getString(cursor.getColumnIndex(“sound”);
cursor.close();
db.close()*/
}
静态最终字符串[]笔=新字符串[]{
“勃朗峰”、“古奇”、“帕克”、“水手”,
“保时捷设计”、“Rotring”、“谢弗”、“沃特曼”
};
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
super.onListItemClick(左、右、位置、id);
对象o=this.getListAdapter().getItem(位置);
String pen=o.toString();
Toast.makeText(这是“您选择了画笔:+”+画笔,Toast.LENGTH\u LONG.show();
}
公共游戏{
}
}
和我的布局:

<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="0dp"
    android:layout_height="0dp"
    android:id="@android:id/list"
    android:layout_weight="1">

  </ListView>

</LinearLayout>

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

尝试更改:

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, PENS));
setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,PENS));
致:

setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple\u list\u item\u 1,android.R.id.text1,PENS);

试着像这样编辑布局文件:

<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>

这是处理UI组件的顺序。首先,从默认布局(导入以实现)充气
列表视图但在此之后,您基本上会告诉
活动
使用其他布局,称为
R.layout.widget\u show
。因此,您在屏幕上看到的并不是您设置适配器的内容

您没有收到实际错误的原因是因为您正在扩展
ListActivity
,它定义了一个默认布局,其中包括
列表视图
。在任何常规
活动
中,您都会得到一个
NullPointerException
,因为尚未设置内容视图,所以
活动
不会知道从何处充气视图

按如下方式更改代码:

@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);
}
@创建时覆盖受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//告诉活动使用自定义布局:
setContentView(R.layout.widget_show);
//设置适配器等
setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,PENS));
getListView().setTextFilterEnabled(true);
}

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

我相信这个(连同@cod3 monk ey)答案已经修复了它-它现在显示得非常完美:)谢谢!杰出的谢谢你的详细解释!
@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);
}