0

这是我的第二个应用,也是第一个使用 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(){
    }
}

和我的布局:

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

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

4

3 回答 3

1

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

<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>
于 2013-01-03T20:30:32.930 回答
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);
}

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

于 2013-01-03T20:32:35.597 回答
0

尝试改变:

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);
于 2013-01-03T20:27:11.067 回答