Добрый день,
Я задал этот вопрос раньше с помощью других адаптеров, таких как 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);
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;
}