0

これは私の 2 番目のアプリであり、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

これは、UIコンポーネントを処理する順序です。最初にデフォルトListViewのレイアウトからを膨らませます(インポートして実現します)が、その後、基本的に、と呼ばれる他のレイアウトを使用するように指示します。その結果、画面に表示されるのは、アダプターを設定しているものではありません。ActivityR.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 に答える