1

私はAndroidAPIを初めて使用しますが、基本的な問題がいくつかあります。リストを機能させようとしていますが、リストに間違ったテキストが表示されます。

各行には2つのTextView(タイトル、サブタイトル)があり、ここにxmlがあります。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dip" >

    <TextView
        android:id="@+id/row_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TITLE"
        android:textSize="15dip"
        android:layout_gravity="center_vertical" />

    <TextView
        android:id="@+id/row_subtitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/row_title"
        android:text="SUBTITLE"
        android:textSize="10dip"
        android:layout_gravity="center_vertical" />

</RelativeLayout>

ListFragmentを拡張し(slidingMenuライブラリのため、このフラグメントが必要です)、カスタムアダプタとアイテムクラスがあります。onActivityCreated()メソッドで、いくつかのランダムなアイテムをアダプターに追加します。

package com.slidingmenu.example;

import android.app.Fragment;
import android.app.ListFragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;


public class SampleListFragment extends ListFragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.list, null);
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        SampleAdapter adapter = new SampleAdapter(getActivity());
        for (int i = 0; i < 20; i++) {
            adapter.add(new SampleItem(new Fragment(), "title no. " + i, "some subtitle"));
        }
        setListAdapter(adapter);
    }

    private class SampleItem {
        public Fragment frag;
        public String title;
        public String subTitle;
        public SampleItem(Fragment frag, String title, String subTitle) {
            this.frag = frag; 
            this.title = title; 
            this.subTitle = subTitle;
        }
    }

    public class SampleAdapter extends ArrayAdapter<SampleItem> {

        public SampleAdapter(Context context) {
            super(context, 0);
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null);
            }
            TextView title = (TextView) convertView.findViewById(R.id.row_title);
            TextView subTitle = (TextView) convertView.findViewById(R.id.row_subtitle);

            return convertView;
        }

    }
}

だから私はリストがこのようなものを表示するだろうと思います:

title no. 0
some subtitle
-
title no. 1
some subtitle
-
title no. 2
some subtitle
-

etc.

代わりに、row.xmlで定義したものを表示するだけです。

TITLE
SUBTITLE
-
TITLE
SUBTITLE
-

etc.

getView()を変更する必要があると思いますが(少なくとも私にはあまり意味がありません)、よくわかりません。私が試したものはすべて、nullpointer例外またはそれ以上の結果になります。

誰かが私が何を変える必要があるか教えてもらえますか?

4

1 に答える 1

1

エラーはアダプタ内にあります:

  public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, null);
            }
            TextView title = (TextView) convertView.findViewById(R.id.row_title);
            TextView subTitle = (TextView) convertView.findViewById(R.id.row_subtitle);

            return convertView;
        }

とをgetView埋めることはtitleありませんsubtitlesuperclass次に、に表示するデータセットを送信することはありませんListFragment

ここにあなたは方法があります。または、このコンストラクターを使用して、andgetCountメソッドをovverideするか、スーパークラスにデータセットをフィードします。ドキュメントを注意深く読んでください。getItemgetItemId

于 2012-10-19T10:05:00.780 に答える