Пользовательский вид с XML-макетом в Android - PullRequest
8 голосов
/ 04 апреля 2011

У меня есть ListAdapter с множеством различных макетов для строк. Чтобы получить чистый код, я хочу передать макеты для строк из getView () адаптера в классах View. Можно ли накачать XML-макет в собственное представление? Я только нашел LayoutInflater, но он возвращает представление, и это не помогает. Я хочу иметь что-то вроде setLayout () из Activity. Возможно ли это?

Спасибо!

Ответы [ 2 ]

28 голосов
/ 04 апреля 2011

Вы можете иметь собственный вид строки и накачать ваш xml в его конструкторе:

public MyRow extends LinearLayout {
    public MyRow(Context context) {
        super(context);
        LayoutInflater.from(context).inflate(R.layout.my_row, this, true);
          ... other initialization ...
    }
}

, а затем использовать merge в my_row.xml:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
  ... your row layout ...
</merge>

merge Элемент заставляет своих детей быть добавлены как дети вашего пользовательского представления.Проверьте Слияние макетов для получения дополнительной информации.

0 голосов
/ 04 апреля 2011

Я всегда использовал пользовательский адаптер с видоискателем, например:

public class CalendarAdapter extends BaseAdapter {
protected static CalViewHolder holder;
private LayoutInflater mInflater;
public HashMap<Integer,String[]> appointments = new HashMap<Integer,String[]>();

public CalendarAdapter(Context context,HashMap<Integer,String[]> set_appointments) {
    // Cache the LayoutInf
     mInflater = LayoutInflater.from(context);
     appointments = set_appointments;
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return appointments == null ? 0:appointments.size();
}
@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
     if (convertView == null) {
         convertView = mInflater.inflate(R.xml.appointment, null);
         holder = new CalViewHolder();
         holder.app_lay = (LinearLayout) convertView.findViewById(R.id.appointment_layout);
         holder.app_head = (TextView) convertView.findViewById(R.id.appointment_head);
         holder.app_body = (TextView) convertView.findViewById(R.id.appointment_body);
         convertView.setTag(holder);
     }else{
        holder = (CalViewHolder) convertView.getTag();
     }
     holder.app_head.setText(appointments.get(position)[0]);
     holder.app_body.setText(appointments.get(position)[1]);
     return convertView;
}

static class CalViewHolder {
    LinearLayout app_lay;
    TextView app_head;
    TextView app_body; 
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...