Android CursorAdapter不调用newView

Android CursorAdapter不调用newView,android,listactivity,Android,Listactivity,我正在创建一个电子邮件界面,该界面使用自定义游标适配器从数据库填充ListView。然后,此ListView中的项目显示一个电子邮件线程,该线程以非常类似的方式使用游标适配器填充ListView。我遇到的问题是第二个ListView将无法填充 初始化这两个适配器的代码几乎是相同的(我们可以说它们在所有目的下都是相同的),通过使用log语句,我已经能够验证传递给第二个适配器的游标不是空的,并且包含它应该包含的所有数据。问题似乎在于从未调用newView方法。我试图调查这一切发生的原因,但却一无所获

我正在创建一个电子邮件界面,该界面使用自定义游标适配器从数据库填充ListView。然后,此ListView中的项目显示一个电子邮件线程,该线程以非常类似的方式使用游标适配器填充ListView。我遇到的问题是第二个ListView将无法填充

初始化这两个适配器的代码几乎是相同的(我们可以说它们在所有目的下都是相同的),通过使用log语句,我已经能够验证传递给第二个适配器的游标不是空的,并且包含它应该包含的所有数据。问题似乎在于从未调用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;
}

为了在您必须定义的每一行中调用newView

    @Override
public int getItemViewType(int position) {

    }

从来没有叫过newView吗?CursorAdapter重用视图,因此不会为每一行调用它。你的观点是什么?日志中有错误吗?(顺便说一句,您应该将设置TextView值的代码移动到bindView中)。老实说,我实际上让bindView完成所有工作,并从newView调用它。我做了一些复制/粘贴来清楚地提出这个问题。我不确定哪种做法是最佳做法,但在这个问题上没有什么区别。要回答此问题,newView开头的log语句永远不会显示。我只能想象这与打开多个游标有关,但除此之外,我也被难住了。好吧,我也被难住了。您是否尝试过在列表为空时添加要显示的视图(即,在
@id/android:empty
作为id的
列表活动
布局中)?这至少会让您知道框架是否认为列表中有任何内容需要显示。我相信我已经解决了这个问题。正如您所建议的那样,我尝试通过实现一个不同的适配器来避免这个问题,这也没有导致列表出现。然后我重新调整了视图属性,两个适配器实现的列表都出现了。我认为我在收件箱和线程视图中创建视图的方式几乎相同,但标题部分的嵌套布局略有不同,这一定与问题有关。无论如何,谢谢你的帮助,“重新调整视图属性”?