我正在创建一个电子邮件界面,使用自定义CursorAdapter从数据库填充ListView。然后,此ListView中的项目将显示一个电子邮件线程,该线程以非常类似的方式使用CursorAdapter填充ListView。我遇到的问题是第二个ListView不会填充。
初始化这两个适配器的代码几乎相同(我们可以说它们用于所有意图和目的)并且通过使用日志语句,我已经能够验证传递给第二个适配器的光标是不为空并包含它应该包含的所有数据。似乎问题是从不调用newView方法。我试图调查为什么会发生这种情况并且没有提出任何问题。我想知道为什么不会调用newView方法。该调用应该从哪里触发?
这是ListActivity的onCreate方法。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.email_view);
cursor = EmailActivity.dbAdapter.fetchEmailThread(getIntent().getStringExtra("senderUsername"));
Log.i(TAG, getIntent().getStringExtra("senderUsername") + " " + cursor.getCount() + " " + cursor.getColumnCount());
startManagingCursor(cursor);
adapter = new EmailViewCursorAdapter(this, cursor);
setListAdapter(adapter);
}
这是来自适配器的代码,只是构造函数和newView方法。
public EmailViewCursorAdapter(Context context, Cursor c) {
super(context, c, true);
inflater = ((Activity) context).getLayoutInflater();
usernameInd = c.getColumnIndex("sender_username");
createdInd = c.getColumnIndex("created_at");
bodyInd = c.getColumnIndex("body");
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Log.i(TAG, "Made it here - new view");
View view = inflater.inflate(R.layout.email_view_item, parent, false);
TextView senderName = (TextView) view.findViewById(R.id.sender_username);
TextView timeString = (TextView) view.findViewById(R.id.sent_time);
TextView emailBody = (TextView) view.findViewById(R.id.email_body);
senderName.setText(cursor.getString(usernameInd));
if(senderName.getText().equals(DataManager.getUser().getUsername()))
senderName.setTextColor(0x999999);
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date sent = format.parse(cursor.getString(createdInd));
timeString.setText(EmailModel.createTimeText(sent));
} catch (ParseException e) {
timeString.setText("");
}
emailBody.setText(cursor.getString(bodyInd));
return view;
}
答案 0 :(得分:2)
为了在您必须定义的每一行中调用新视图
@Override
public int getItemViewType(int position) {
}