Java Android ListView不显示数据…在这方面非常新,而且某些I';我做错了什么事
这是我的第二个应用程序,也是第一个使用ListActivity的应用程序。某个地方出现了一些问题—活动(ShowWidget)显示—但列表为空 以下是我的ListActivity代码: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
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);
}