1

listviewアクティビティを作成したインテントを介してアクティビティに渡されたデータをに入力しようとしています。表示されるprintlnステートメントは、データが正しく渡されたことを確認します(つまり、期待されるコンテンツが出力されます。つまりArrayList、アダプターで参照されているものが正しく初期化されます)。しかし、私NullPointerExceptionはオンラインになり続けます

content.setText(Html.fromHtml(cmts.get(position).content));

アダプターに何か問題があるはずです-おそらくgetItem()にあるか、またはへの呼び出しがcmts.get(position)私が思っていることをしていないのかもしれませんが、現時点ではそれを理解できません。

public class CommentsView extends Activity {
ArrayList<Comment> cmts;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_comments_view);

    cmts = (ArrayList<Comment>) getIntent().getExtras().getSerializable("clist");

    for (Comment c : cmts) {
        System.out.println("CMTinCV: " + c.content);
    }

    ListView lv = (ListView)findViewById(R.id.commentsList);

    CommentAdapter ca = new CommentAdapter();

    lv.setAdapter(ca);

}   

class CommentAdapter extends BaseAdapter {
    public CommentAdapter(){

    }
@Override
public int getCount() {
    return cmts.size()-1;
}

@Override
public Object getItem(int position) {
    return cmts.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        convertView = getLayoutInflater().inflate(R.layout.commentbox, null);

        TextView content = (TextView)findViewById(R.id.commentText);
        TextView author = (TextView)findViewById(R.id.commentAuthor);            
        TextView date = (TextView)findViewById(R.id.commentDate);     

        content.setText(Html.fromHtml(cmts.get(position).content));
        author.setText(cmts.get(position).author.name);
        date.setText(cmts.get(position).date);   
    }

    return convertView;
}

}
}
4

4 に答える 4

3

以下のように、getviewメソッドでtextviewにアクセスする必要があります。次の convertView.findViewById(R.id.commentText);ようにアクセスします。

  @Override
   public View getView(int position, View convertView, ViewGroup parent) {
   if (convertView == null) {
    convertView = getLayoutInflater().inflate(R.layout.commentbox, null);

    TextView content = (TextView)convertView.findViewById(R.id.commentText);
    TextView author = (TextView)convertView.findViewById(R.id.commentAuthor);            
    TextView date = (TextView)convertView.findViewById(R.id.commentDate);     

    content.setText(Html.fromHtml(cmts.get(position).content));
    author.setText(cmts.get(position).author.name);
    date.setText(cmts.get(position).date);   
}
  return convertView;
 }
于 2013-02-27T08:52:34.580 に答える
2

アダプタのコンストラクタをこれに変更します(アクティビティの内部クラスでない場合):

ArrayList<Comment> cmts;
public CommentAdapter(ArrayList<Comment> mComments){
     this.cmts = mComments;
}

そしてこれらの行:

TextView content = (TextView)findViewById(R.id.commentText);
TextView author = (TextView)findViewById(R.id.commentAuthor);            
TextView date = (TextView)findViewById(R.id.commentDate); 

次のようになります:

TextView content = (TextView) convertView.findViewById(R.id.commentText);
TextView author = (TextView) convertView.findViewById(R.id.commentAuthor);            
TextView date = (TextView) convertView.findViewById(R.id.commentDate); 
于 2013-02-27T08:46:27.233 に答える
0

変数がnullであるか、最初にないかを確認します。

if(cmts.get(position) != null) {
    content.setText(Html.fromHtml(cmts.get(position).content));
    author.setText(cmts.get(position).author.name);
    date.setText(cmts.get(position).date); 
}
于 2013-02-27T08:46:08.490 に答える
0

このようなアダプタを作成するには

CommentAdapter ca = new CommentAdapter(cmts);

そしてCommentAdapter、このようなコンストラクターを作成するクラス

public CommentAdapter(ArrayList<Comment> cmts){
       this.cmts = cmts;
}

そして、CommentAdapterクラスでローカル変数を作成します

 private ArrayList<Comment> cmts;
于 2013-02-27T08:56:44.270 に答える