2012-03-28 4 views
0

私たちが上下にスクロールアップするときに問題がありますか? getviewが正しく呼び出されませんでしたか? の背景画像はそれぞれのURLからロードされていますか? レイアウトはbaseadapterを使用して送信者受信者メッセージを表示するためのlistviewを作成するにはどうすればよいですか?

パブリッククラスNewReadMessageAdapterがBaseAdapter { プライベートコンテキストコンテキストを拡張..送信側と受信側で異なります。

private LayoutInflater vi; 
public ImageLoader imageLoader; 
private Typeface tf; 

private class Image { 
    String pic_url = new String(); 
    Bitmap thumb; 
    String messege = new String(); 
    int id; 
    String time = new String(); 
    String sender_name = new String(); 
    public boolean sender_user; 

} 


private Image[] images; 
ArrayList<Messages> messages = new ArrayList<Messages>(); 

private TextView txt_msg; 

private TextView txt_name; 

private TextView txt_time; 
Button btn_loc; 
private ImageView img; 

private ArrayList<Messages> mData = new ArrayList<Messages>(); 
private TreeSet<Integer> mSeparatorsSet = new TreeSet<Integer>(); 
private static final int TYPE_RECEIVER = 0; 
private static final int TYPE_SENDER = 1; 
public NewReadMessageAdapter(Context context, 
     ReadMessagePostParser messageParser, String sender_id, 
     String reciever_id) { 

    this.context = context; 

    tf = Typeface.createFromAsset(context.getAssets(), "fonts/tahoma.ttf"); 
    messages = messageParser.getMessages(); 
    imageLoader = new ImageLoader(context.getApplicationContext()); 
    images = new Image[messages.size()]; 
    for (int i = 0, j = messages.size(); i < j; i++) { 
     images[i] = new Image(); 
     images[i].messege = messages.get(i).getMessage_text(); 

     images[i].time = messages.get(i).getTime(); 
     if (messages.get(i).getMessage_from().equals("YES")) { 
      images[i].sender_name = messageParser.sender_name; 
      images[i].pic_url = messageParser.sender_pic_url; 
      images[i].sender_user = true; 
      images[i].id = Integer.parseInt(sender_id); 


     } else { 
      images[i].sender_user = false; 
      images[i].id = Integer.parseInt(reciever_id); 
      images[i].sender_name = messageParser.reciever_name; 
      images[i].pic_url = messageParser.receiver_pic_url; 

     } 
    } 

    for (int i = 0; i < images.length; i++) { 
     System.out.println(images[i].pic_url + " " + images[i].sender_name 
       + " " + images[i].messege); 
    } 
    vi = LayoutInflater.from(context); 
    imageLoader = new ImageLoader(context.getApplicationContext()); 

} 
public void addItem(final Messages item) { 
    mData.add(item); 
    notifyDataSetChanged(); 
} 

public void addSeparatorItem(final Messages item) { 
    mData.add(item); 

    mSeparatorsSet.add(mData.size() - 1); 
    notifyDataSetChanged(); 
} 
@Override 

public int getCount() { 

    return mData.size(); 
} 

@Override 

public Object getItem(int position) { 

    return mData.get(position); 
} 

@Override 

public long getItemId(int position) { 
    return position; 
} 
@Override 
public int getItemViewType(int position) { 
    return mSeparatorsSet.contains(position) ? TYPE_SENDER : TYPE_RECEIVER; 
} 

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

     ViewHolder holder = null; 
     int type = getItemViewType(position); 

     if (convertView == null) { 

      switch (type) { 
       case TYPE_SENDER: 

        System.out.println("Sender"); 
        holder = new ViewHolder(); 
        convertView = vi.inflate(R.layout.list_row_layout_sender, null); 
        holder.txt_msg = (TextView) convertView 
          .findViewById(R.id.txt_msg); 
        holder.txt_name = (TextView) convertView 
          .findViewById(R.id.txt_name); 
        holder.txt_time = (TextView) convertView 
          .findViewById(R.id.txt_time); 
        holder.img = (ImageView) convertView 
          .findViewById(R.id.user_img); 
        holder.btn_loc = (Button) convertView 
          .findViewById(R.id.btn_loc); 
        convertView.setTag(holder); 
        break; 
       case TYPE_RECEIVER: 
        System.out.println("Receiver"); 
        convertView = vi.inflate(R.layout.list_row_layout_receiver, null); 
        holder = new ViewHolder(); 
        holder.txt_msg = (TextView) convertView 
          .findViewById(R.id.txt_msg); 
        holder.txt_name = (TextView) convertView 
          .findViewById(R.id.txt_name); 
        holder.txt_time = (TextView) convertView 
          .findViewById(R.id.txt_time); 
        holder.img = (ImageView) convertView 
          .findViewById(R.id.user_img); 
        holder.btn_loc = (Button) convertView 
          .findViewById(R.id.btn_loc); 
        convertView.setTag(holder); 
        break; 
      } 

     } else { 
      holder = (ViewHolder)convertView.getTag(); 
     } 
     holder.btn_loc.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       System.out 
         .println("-------------- btn_loc ------------------- Sender"); 
       Developer.callIntent_userlocation(context, "18.50929796 ", 
         "73.79045371"); 
      } 
     }); 
     holder.txt_name.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       System.out.println("----Name----"); 

      } 
     }); 
     holder.img.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       System.out.println("----Image----"); 

      } 
     }); 
     holder.txt_name.setText(mData.get(position).message_from); 
     holder.txt_time.setText(mData.get(position).time); 
     holder.txt_msg.setText(mData.get(position).message_text); 
     if (position != 0) { 
      cached = images[position - 1]; 
      if (cached.sender_user == flag) { 
       holder.img.setVisibility(ImageView.INVISIBLE); 
       holder.txt_name.setVisibility(TextView.INVISIBLE); 
      } else 
       imageLoader.DisplayImage(images[position].pic_url.trim() 
         .replace(" ", "%20"), ReadMessageActivityNew.activity, 
         holder.img); 
     } else 
      imageLoader.DisplayImage(
        images[position].pic_url.trim().replace(" ", "%20"), 
       ReadMessageActivityNew.activity, holder.img); 

     return convertView; 
    } 
static class ViewHolder { 
    TextView txt_msg; 
    TextView txt_name; 
    TextView txt_time; 
    ImageView img; 
    Button btn_loc; 
} 

}

答えて

0

レイアウトが同じである場合にのみconvertViewを再利用する方がよいです。ここではレイアウトが異なるので、送信者が受信者用に使用するconvertViewを再利用すると、ビューが期待どおりに表示されないことがあります。

関連する問題