ArrayAdapter Показать Onyl One Record

1

Добрый день,

Я задал этот вопрос раньше с помощью других адаптеров, таких как SimpleAdapter, но решение для простого адаптера не работает для ArrayAdapter. В SimpleAdapter я получил ширину и высоту экрана, а затем передал ее в RelativeLayout для строки данных. Эффект заключался в том, что одновременно показывалась только одна запись, заполняющая весь экран. Это было хорошо со статическими данными, но теперь я хочу использовать изменяемые данные. Короче говоря, я действительно не хочу пропускать высоту и ширину. В моем макете xml используется dip, поэтому размеры экрана могут изменять все, что им нужно. То, что я ДЕЙСТВИТЕЛЬНО, является способом управления вызовом getView только по одной записи за раз.

В любом случае, используя обходной путь от SimpleAdapter, я думал, что прохождение высоты и ширины так же, как раньше, будет работать, но по какой-то причине на этот раз я получаю сообщение об ошибке, которое я не могу понять. Вот код, который устанавливает ширину и высоту:

RelativeLayout.LayoutParams szParms = new RelativeLayout.LayoutParams(mWidth, mHeight);
vw_BigRow.setLayoutParams(szParms);

Высота и ширина определяются в другом месте и точны на всех устройствах, с которыми я тестировал. Не совсем уверен, что еще писать, так что просто скажите мне, и я добавлю этот код/​​информацию к вопросу.

E/AndroidRuntime(404): FATAL EXCEPTION: main
E/AndroidRuntime(404): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams

Изменить. Как было правильно указано, моя ошибка возникает с исключением CastClassException, но я все еще не выполняю задание правильно, поскольку я продолжаю получать ошибку. Я попытался в этом упражнении установить высоту/ширину следующим образом:

AbsListView.LayoutParams szParms = new AbsListView.LayoutParams(mWidth, mHeight);
lstvw_LiftData.setLayoutParams(szParms);

E/AndroidRuntime(1886): FATAL EXCEPTION: main
E/AndroidRuntime(1886): java.lang.ClassCastException: android.widget.AbsListView$LayoutParams

а также

ListView.LayoutParams szParms = new ListView.LayoutParams(mWidth, mHeight);
lstvw_LiftData.setLayoutParams(szParms);

E/AndroidRuntime(1886): FATAL EXCEPTION: main
E/AndroidRuntime(1886): java.lang.ClassCastException: android.widget.AbsListView$LayoutParams

lstvw_LiftData является действительным ref, но не null.

Внутри переопределения getView() массива ArrayAdapter я также пытаюсь установить значения с тем же результатом @Override public View getView (int position, View convertView, родительская группа ViewGroup) {...}

Единственное, что я могу приступить к работе, это то, а затем пара, не все, но пара моих элементов игнорирует их расположение в макете и переходит в нисходящее.

View vw_BigRow = convertView;

if (vw_BigRow == null) 
{
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    vw_BigRow = inflater.inflate(R.layout.liftdatalayout, null);
}

vw_BigRow.setMinimumHeight(mHeight);
vw_BigRow.setMinimumWidth(mWidth);
  • 0
    Вы решили проблему? Из кода, который вы добавили, я не вижу, как вы устанавливаете данные с помощью представления.
Теги:

1 ответ

1
Лучший ответ

1.Если вы хотите call to just one record at a time, просто управляйте getCount адаптера, который вы реализовали, чтобы вернуть 1.

2.The java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams Исключение java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams - это то, что в представлении, которое нужно добавить в listview, следует использовать AbsListView.LayoutParams вместо других LayoutParams, таких как RelativeLayout$LayoutParams.

РЕДАКТИРОВАТЬ:

См. Ниже код getView, рекомендованный Google.

/**
 * Make a view to hold each row.
 *
 * @see android.widget.ListAdapter#getView(int, android.view.View,
 *      android.view.ViewGroup)
 */
public View getView(int position, View convertView, ViewGroup parent) {
    // A ViewHolder keeps references to children views to avoid unneccessary calls
    // to findViewById() on each row.
    ViewHolder holder;

    // When convertView is not null, we can reuse it directly, there is no need
    // to reinflate it. We only inflate a new View when the convertView supplied
    // by ListView is null.
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item_icon_text, null);

        // Creates a ViewHolder and store references to the two children views
        // we want to bind data to.
        holder = new ViewHolder();
        holder.text = (TextView) convertView.findViewById(R.id.text);
        holder.icon = (ImageView) convertView.findViewById(R.id.icon);

        convertView.setTag(holder);
    } else {
        // Get the ViewHolder back to get fast access to the TextView
        // and the ImageView.
        holder = (ViewHolder) convertView.getTag();
    }

    // Bind the data efficiently with the holder.
    holder.text.setText(DATA[position]);
    holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);

    return convertView;
}

static class ViewHolder {
    TextView text;
    ImageView icon;
}
  • 0
    См редактировать, так как я все еще делаю что-то не так.
  • 0
    @ user1278561, пожалуйста, просто введите весь свой код getview или весь код адаптера. Это поможет мне найти настоящую проблему. А какой у вас макет предмета? Макет или просто вид. Если это просто представление, вы можете просто поместить представление в корень XML.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню