0

私はAndroidでListViewをいじっていますが、ListActivityを拡張する単純なクラスがあります。

xmlファイルのListViewの名前を別の名前に変更するandroid:listと、プログラムがクラッシュします。

これが私のListActivityコードです:

private NewExpenseScreenModel mDbAdabter;

    String[] items = { "Category", "Month", "Year"};
       /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.statistics);

        Spinner spinner = (Spinner) findViewById(R.id.spinner);

        ArrayAdapter adapter = new ArrayAdapter(
                this,
                android.R.layout.simple_spinner_item, 
                items);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        mDbAdabter = new NewExpenseScreenModel(this);

        populateFields();


    }

    private void populateFields() 
    {
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spending_row, mDbAdabter.getAllCategories());
        setListAdapter(adapter);
    }

これが私のxmlファイルです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:padding="10dip"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content">

    <Spinner
       android:id="@+id/spinner"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:prompt="@string/spinner_title"
   />
    <ListView android:id="@+id/android:list" android:layout_height="wrap_content"  android:layout_width="match_parent"></ListView>
</LinearLayout>

何が起こっているのか考えてみてください。後でonItemClickedListenerを実装したいので、idでListViewを見つけられるようにしたいです。IDを変更できない理由がよくわかりません

追加情報:

リストid="android:list"を持つ別のxmlファイルを使用する別のクラスもありますが、idでそのlistViewを見つける必要はないので、問題はありません。他のクラスは、同じxmlファイルを使用して各行のレイアウトを記述します。

アップデート:

findViewById(android.R.id.list);代わりにを使用してIDにアクセスできましたfindViewById(R.id.list);が、リストの名前を変更できない理由がわかりません

4

3 に答える 3

1

リストビューIDは。である必要があります@android:id/list

+新しいIDを定義するときにidで使用します。ListViewを使用しているので、listviewのidが必要でありlistlistidはすでに内部で定義されているため、を追加する必要はありません+

編集済み

からクラスを拡張する場合、上記は必須ですListActivity。@Mejonzhanの回答を参照してください。

ここで、独自のIDが必要な場合、または多くのリストビューが必要な場合は、ListActivityを拡張せずに、Activityを拡張して、以下のようにListViewを処理します。

次のようにIDを変更します。

<ListView android:id="@+id/myListView"

そして、コードで、次のようにリストビューにアクセスします。

ListView myListView =(ListView)findViewById(R.id.myListView)

于 2012-08-08T00:47:55.790 に答える
0

`ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item_1, items);の代わりにこれを試してください`ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, items);

于 2012-08-04T10:14:29.647 に答える
0

ListActivityには、画面の中央にある単一の全画面リストで構成されるデフォルトのレイアウトがあります。ただし、必要に応じて、onCreate()のsetContentView()を使用して独自のビューレイアウトを設定することにより、画面レイアウトをカスタマイズできます。これを行うには、独自のビューにIDが「@ android:id / list」(またはコード内の場合はリスト)のListViewオブジェクトが含まれている必要があります

ListActivityはActivityを拡張し、ソースコードを検索し、ListActivityを見つけ、関数を見つけることができます。

public void onContentChanged() {
239        super.onContentChanged();
240        View emptyView = findViewById(com.android.internal.R.id.empty);
241        mList = (ListView)findViewById(com.android.internal.R.id.list);
242        if (mList == null) {
243            throw new RuntimeException(
244                    "Your content must have a ListView whose id attribute is " +
245                    "'android.R.id.list'");
246        }
247        if (emptyView != null) {
248            mList.setEmptyView(emptyView);
249        }
250        mList.setOnItemClickListener(mOnClickListener);
251        if (mFinishedStart) {
252            setListAdapter(mAdapter);
253        }
254        mHandler.post(mRequestFocus);
255        mFinishedStart = true;
256    }

241行目mList=(ListView)findViewById(com.android.internal.R.id.list); したがって、リスト名を変更することはできません

于 2012-08-08T00:46:36.450 に答える