Android CursorAdapter не вызывает newView

89
10

Я создаю почтовый интерфейс, который заполняет ListView из базы данных с помощью пользовательского CursorAdapter. Элементы в этом ListView затем отображают поток электронной почты, который аналогичным образом заполняет ListView с помощью CursorAdapter. Проблема, с которой я столкнулась, заключается в том, что второй ListView не будет заполняться.


Код для инициализации обоих этих адаптеров почти идентичен (мы можем сказать, что они предназначены для всех целей и задач), и с помощью операторов журнала я смог проверить, что курсор, передаваемый второму адаптеру, не пусто и содержит все данные, которые он должен. Кажется, что проблема заключается в том, что метод newView никогда не вызывается. Я попытался выяснить, почему это происходит, и ничего не придумал. Мне интересно, почему метод newView не будет вызван. Где должен быть вызван этот вызов?


Вот метод onCreate для ListActivity.


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;
}

спросил(а) 2021-01-25T17:23:55+03:00 4 месяца, 4 недели назад
1
Решение
76

inorder для вызова newView в каждой строке, которую вы должны определить

    @Override
public int getItemViewType(int position) {

}

ответил(а) 2021-01-25T17:23:55+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема