Я пытаюсь написать адаптер ListView, который передаст представление на основе одного из нескольких файлов xml в зависимости от атрибута данных, который я создаю для представления. Мой код работает отлично, за исключением случаев, когда я пытаюсь использовать convertView для ускорения процесса. Независимо от того, как я пытаюсь его использовать, я либо разбиваю свою программу, либо получаю странный результат. Я понимаю почему это будет проблемой для convertView, но я сильно подозреваю, что я все еще могу сделать эту работу. Может ли кто-нибудь посоветовать мне, как я могу исправить свой код? (сейчас я использую convertView как имя точки зрения, что я вернусь, даже если я не имею «если (convertView == NULL)» процедура работает должным образом)несколько представлений xml с конвертированием android
public class PaymentListFragment extends ListFragment {
private ArrayList<Payment> mPayments;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.payment_schedule_title);
mPayments = PaymentSchedule.get(getActivity()).getPayments();
PaymentAdapter adapter = new PaymentAdapter(mPayments);
setListAdapter(adapter);
}
private class PaymentAdapter extends ArrayAdapter<Payment> {
public PaymentAdapter(ArrayList<Payment> payments) {
super(getActivity(), 0, payments);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Payment p = mPayments.get(position);
//normal
//if (convertView == null) {
//cant work out how to use convertview conditional without screwing up project
//it would speed it up to fix this however
if (p.type == Payment.TYPE_START) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_start, null);
TextView remainDisplay =
(TextView) convertView.findViewById(R.id.remainDisplayStart);
remainDisplay.setText(p.getRemainString());
TextView paymentDate =
(TextView) convertView.findViewById(R.id.paymentDateStart);
paymentDate.setText(p.getDateString());
TextView paymentDisplay =
(TextView) convertView.findViewById(R.id.paymentDisplayStart);
paymentDisplay.setText(p.getDefaultPaymentString());
TextView aprDisplay =
(TextView) convertView.findViewById(R.id.aprDisplayStart);
aprDisplay.setText(p.getInterestRate() * 1200 + "%");
} else {
//if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_payment, null);
//}
TextView paymentDate =
(TextView) convertView.findViewById(R.id.paymentDate);
paymentDate.setText(p.getDateString());
TextView paymentDisplay =
(TextView) convertView.findViewById(R.id.paymentDisplay);
paymentDisplay.setText(p.getPaymentString());
TextView principalDisplay =
(TextView) convertView.findViewById(R.id.principalDisplay);
principalDisplay.setText(p.getPrincipalString());
TextView interestDisplay =
(TextView) convertView.findViewById(R.id.interestDisplay);
interestDisplay.setText(p.getInterestString());
TextView remainDisplay =
(TextView) convertView.findViewById(R.id.remainDisplay);
remainDisplay.setText(p.getRemainString());
}
//}
return convertView;
}
}
}
ли судимое использовать 'getItemViewType()' и 'getViewTypeCount()' 'с ViewHolder' вместо кода в' GetView() '? – anil
Я собирался написать, что сказал @anil - вы можете проверить этот вопрос здесь http://stackoverflow.com/questions/4777272/android-listview-with-different-layout-for-each-row –
Это похоже, что это основано на позиции. По мере того, как я продолжаю, я хочу иметь возможность добавлять другие типы на основе пропущенных платежей, дополнительных платежей, штрафов и т. Д. И иметь их в хронологическом порядке. Я попытаюсь использовать метод bonnyz для использования тегов. Раньше я пытался реализовать операторы if, которые ссылались на данные, но не могли понять, как связать их с convertView. –