Я заполняю список с помощью настраиваемого адаптера, но теперь я хочу изменить макет строки, если идентификатор содержит в массиве.Как я могу изменить компоновку в адаптере?
Это мой код:
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
CalcHolder holder = new CalcHolder();
PojoCalc f = calcList.get(position);
Integer[] calcs_lite = {6, 8, 18, 37, 51, 75};
boolean exists = containsValue(calcs_lite, f.get_id());
// First let's verify the convertView is not null
// Value exist, so, we enable layout
if (convertView == null) {
// This a new view we inflate the new layout
if(exists){
Log.e("AdapterCalc1", "VALUE:::" + exists + ":::ID:::" + f.get_id() + ":::NAME:::" + f.getName() + ":::AVAILABLE");
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.calc_row_adapter, null);
}else{
Log.e("AdapterCalc1", "VALUE:::" + exists + ":::ID:::" + f.get_id() + ":::NAME:::" + f.getName() + ":::UNAVAILABLE");
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.calc_row_adapter_disabled, null);
}
// Now we can fill the layout with the right values
TextView tv_name = (TextView) v.findViewById(R.id.name);
TextView tv_subtitle = (TextView) v.findViewById(R.id.subtitle);
holder.calcNameView = tv_name;
holder.calcSubtitleView = tv_subtitle;
v.setTag(holder);
}
else{
holder = (CalcHolder) v.getTag();
}
holder.calcNameView.setText(f.getName());
holder.calcSubtitleView.setText(f.getSubtitle());
return v;
}
Первый раз, когда я получаю список, он работает, но когда я тяну вниз, чтобы получить больше элементов, он выходит из строя, это не меняет вид справа. Я думаю, что в «другом» есть проблема с держателем, но я не уверен.
Проблема в том, что 'если (convertView == NULL)' условие будет ложным при прокрутке, как вид уже существует и что угодно вы Вы уже завыли в первый раз, когда создали свое представление. RecyclerView обрабатывает эту ситуацию намного лучше, чем ListView, но если вам нужно использовать listview, посмотрите на 'getItemViewType' (http://developer.android.com/reference/android/widget/Adapter.html) и посмотрите, как вы можете используй это. Это хороший пример, который объясняет концепции лучше https://guides.codepath.com/android/Implementing-a-Heterogenous-ListView – kha