2012-04-19 14 views
0

RSSフィードから情報を取得し、DOMパーサー(クライアントRSSフィードに関する問題)を使用して解析し、解析されたオブジェクトをListViewに表示するアプリケーションを作成しています。何らかの理由でカスタムArrayAdapterが呼び出されていない

は、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 open source Java XML parser articleに従って作成されます。

おかげでたくさん...

+0

onPostExecuteの 'result.size()'についてはどうですか? –

+0

は、リスト数が0である可能性があります。データが空であることを意味します。 – ngesh

+0

**結果**に** onPostExecute **のデータが含まれていますか? – waqaslam

答えて

3

ます(カスタムアダプタで)

getCount() 

をオーバーライドして、特殊なアダプタの作品をさせるためにdataのサイズを返す必要があります。それとも、あなたの配列の内容を知らないdata

public ArrayAdapter (Context context, int textViewResourceId, T[] objects) 
+0

を投稿する前に関数をオーバーライドし、今は 'getView()' ISが呼び出されていることを再確認しました。表示されているビューは完全なリストではなく、list_itemです。 したがって、 'adapter2 = new NoPicAdapterV2(NoPicList.this、R.layout.no_pic_list_item、result);'から 'R.layout.no_pic_list'へのコンストラクタ呼び出しを変更しました。これはもちろんリスト項目ではなく、しかし、何も起こっていません... – thepoosh

+0

listviewは、エントリの数がdata.size()に等しくなります。私はあなたのコメント – Blackbelt

+0

であなたが意味するものを理解していないのは、最も簡単な配列を与えることです。 arrayAdapter内の配列へのローカル参照を保持することには意味がありません。スーパーは既にそれを行いますので、 – njzk2

0

あなたのArrayAdapterを取る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); 
} 
0

私はコードの下にちょうどスーパーに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); 
} 
関連する問題