1
私は小さなsmsのようなアプリケーションを構築しています。私は会話リストビューを作ったが、問題がある。リストのすべての行には写真(連絡先の写真)があり、下にスクロールするとリストの先頭から別の行の写真が表示されます。ListViewの繰り返しのアイテム(写真)
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
public class ConversationsActivity extends Activity {
private final String TAG = "ConversationsActivity";
ConversationAdapter adapter;
ContentResolver contentResolver;
Cursor cursor;
ListView convList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.conversations_list);
convList = (ListView) findViewById(R.id.convList);
}
@Override
protected void onResume() {
super.onResume();
setupConvsList();
}
void setupConvsList()
{
Context context = getApplicationContext();
contentResolver = context.getContentResolver();
cursor = contentResolver.query(Uri.parse("content://mms-sms/conversations"), null, null, null, "date DESC");
startManagingCursor(cursor);
adapter = new ConversationAdapter(this, cursor);
convList.setAdapter(adapter);
}
}
何私は変更する必要があります:リストを示し
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class ConversationAdapter extends SimpleCursorAdapter {
private final String TAG = "ConversationAdapter";
static final String[] FROM = {"body", "address", "date", "m_size"};
static final int[] TO = {R.id.textMsg, R.id.textPerson, R.id.textDate, R.id.textConvCounter};
ImageView imageAvatar;
ContentResolver contentResolver;
LayoutInflater layoutInflater;
public ConversationAdapter(Context context, Cursor c) {
super(context, R.layout.row, c, FROM, TO);
}
@Override
public void bindView(View row, Context context, Cursor cursor) {
super.bindView(row, context, cursor);
long timestamp = cursor.getLong(cursor.getColumnIndex("date"));
TextView textDate = (TextView) row.findViewById(R.id.textDate);
textDate.setText(DateUtils.getRelativeTimeSpanString(timestamp));
TextView textMsg = (TextView) row.findViewById(R.id.textMsg);
String previewMsg = cursor.getString(cursor.getColumnIndex("body"));
if (previewMsg.length() > 40)
{
textMsg.setText(previewMsg.substring(0, 37) + "...");
}
TextView textPerson = (TextView) row.findViewById(R.id.textPerson);
String contactId = DataManager.getContactId(context, (textPerson.getText()).toString());
if (contactId != "")
{
contentResolver = context.getContentResolver();
imageAvatar = (ImageView) row.findViewById(R.id.imageAvatar);
Long lContactId = Long.parseLong(contactId);
Bitmap bitmap = DataManager.getContactPhoto(contentResolver, lContactId);
if (bitmap != null)
{
imageAvatar.setImageBitmap(bitmap);
bitmap = null;
}
String contactName = DataManager.getContactName(context, (textPerson.getText()).toString());
textPerson.setText(contactName);
}
}
}
とがあり、私の活動:
は、ここに私のアダプタですか? ありがとう!
ああ、そうです。ありがとう:) –
私は同じことを経験しました。 contactIdがない場合は、デフォルトのイメージに設定する必要があります。それ以外の場合は、リサイクルされたビューのイメージが使用されます。 – toobsco42