0

私は、RSSフィードから情報を取得し、DOMパーサーを使用してそれを解析し(クライアントのRSSフィードで問題が発生します)、解析されたオブジェクトをListViewに表示するアプリを作成しています。

何らかの理由で、getView()は呼び出されていません...

アクティビティのコードは次のとおりです。

public class NoPicList extends Activity {
    ListView list;
    NoPicAdapterV2 adapter2;
    ProgressDialog mDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.no_pic_list);
        list = (ListView) findViewById(R.id.noPicListView);

        // get the request from the main activity
        Bundle b = getIntent().getExtras();
        String request = b.getString("REQUEST");

        mDialog = new ProgressDialog(this);
        mDialog.setCancelable(false);
        mDialog.setMessage("Lodaing Data");
        mDialog.show();

        new GetNewsAndCalendar().execute(request);
    }

    @Override
    protected void onPause() {
        mDialog.dismiss();
        super.onPause();
    }

    class GetNewsAndCalendar extends
        AsyncTask<String, Void, ArrayList<Message>> {

        @Override
        protected ArrayList<Message> doInBackground(String... params) {
            String url = params[0];
            DOMFeedParser parser = new DOMFeedParser(url);
            return parser.parse();
        }

        @Override
        protected void onPostExecute(ArrayList<Message> result) {
            adapter2 = new NoPicAdapterV2(NoPicList.this, R.layout.no_pic_list_item, result);
            list.setAdapter(adapter2);
            mDialog.dismiss();
            }

    }

}

アダプタのコードは次のとおりです。

public class NoPicAdapterV2 extends ArrayAdapter<NewAndCalendar> {
    private ArrayList<Message> data;
    private LayoutInflater inflator;
    private Activity mActivity;

    public NoPicAdapterV2(Context context, int textViewResourceId,
        ArrayList<Message> result) {
        super(context, textViewResourceId);
        data = (ArrayList<Message>) result;
        mActivity = (Activity) context;
        inflator = (LayoutInflater) mActivity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (vi == null)
            vi = inflator.inflate(R.layout.no_pic_list_item, parent, false);

        TextView title = (TextView) vi.findViewById(R.id.noPicTitle);
        TextView subtitle = (TextView) vi.findViewById(R.id.noPicSubtitle);
        TextView id = (TextView) vi.findViewById(R.id.noPicID);

        title.setText(data.get(position).getTitle().toString());
        subtitle.setText(data.get(position).getDate().toString());
        id.setText(data.get(position).getDescription());

        return vi;
    }
}

DOMFeedParserコードは、IBMオープンソースのJavaXMLパーサーの記事に従って作成されています。

本当にありがとう...

4

3 に答える 3

3

(カスタムアダプタで)オーバーライドする必要があります

getCount()

dataアダプターを機能させるために、のサイズを返します。または、次のようなArrayAdapterコンストラクターを呼び出します。data

public ArrayAdapter (Context context, int textViewResourceId, T[] objects)
于 2012-04-19T10:04:43.210 に答える
0

ArrayAdapterは配列の内容を認識していないため、カウントは0です。

代わりにこのスーパーコンストラクターを使用してください:http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter%28android.content.Context,%20int,%20java.util.List%3CT%3E%29

このような :

public NoPicAdapterV2(Context context, int textViewResourceId,
    ArrayList<Message> result) {
    // Here
    super(context, textViewResourceId, result);
    data = (ArrayList<Message>) result;
    mActivity = (Activity) context;
    inflator = (LayoutInflater) mActivity
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
于 2012-04-19T10:36:05.163 に答える
0

以下のコードが機能することを願っています。super(...)にもう1つの引数を追加するだけです。

public NoPicAdapterV2(Context context, int textViewResourceId,
        ArrayList<Message> result) {
        super(context, textViewResourceId,result);
        data = (ArrayList<Message>) result;
        mActivity = (Activity) context;
        inflator = (LayoutInflater) mActivity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
于 2012-04-19T11:32:40.797 に答える