У меня есть Gridview, и когда я нажимаю определенный элемент, я хочу нарисовать фон.Попытка выделить выделенный элемент из GridView
У меня есть адаптер для загрузки элементов gridview динамически. И у меня есть слушатель на этом адаптере. На этом слушателе я помещаю фон в цвет, который мне нужен, но затем он также рисует другой элемент в списке (я думаю, тот, который имеет ту же позицию, после перезагрузки).
Важно: мой минимальный API - 9, и я не могу его изменить.
Вот код для моего метода GetView (от адаптера):
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder = null;
if (convertView == null) {
viewHolder=new ViewHolder();
LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=layoutInflater.inflate(R.layout.highwayappselectionitem,parent, false);
viewHolder.appImageIcon=(ImageView) view.findViewById(R.id.highwayGridViewItemIcon);
viewHolder.appNameLabel=(TextView) view.findViewById(R.id.highwayGridViewItemName);
viewHolder.appInfoButton = (ImageView) view.findViewById(R.id.highwayGridViewItemInfoButton);
viewHolder.linearLayout = (LinearLayout) view.findViewById(R.id.HighwayGridViewItem);
}else{
view= convertView;
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.appNameLabel.setText(appsList.get(position).getAppName());
viewHolder.appImageIcon.setImageDrawable(appsList.get(position).getImageIcon());
view.setTag(viewHolder);
viewHolder.linearLayout.setOnClickListener(new MyOnClickListener(position,0));
return view;
}
и вот слушатель для LinearLayout (который представляет каждый элемент):
public void onClick(View v) {
if(selectedView==0 || selectedView==1){
appName=appsList.get(position).getAppName();
filePath=appsList.get(position).getFilePath();
appLogo=appsList.get(position).getImageIcon();
v.setBackgroundColor(activity.getResources().getColor(R.color.light_grey));
System.out.println("Just pressed the app ... "+appName);
System.out.println("His filePath is ... "+filePath);
HighwayGridViewAppItem tmpSelectedItem= new HighwayGridViewAppItem(appLogo, appName, filePath);
selectedAppsList.add(tmpSelectedItem);
System.out.println("AppSelectionCUstomAdapter : Added a new application to the list of selected apps .!!!!!!!!!!!!!!!.........");
System.out.println("AppselectioncustomAdaptaer : The size of the selectedAppsList is now : "+selectedAppsList.size());
}else{
//pressed the info button
System.out.println("This will be implemented later, need access to the webservices");
}
}
}
игнорировать если (выбранный вид == 0 или == 1 он больше не используется, я могу его удалить ...).
Кроме того, appsLIst - это список моих пользовательских классов элементов. Там у меня есть логический атрибут для представления, если он выбран или нет.
Происходящее, представьте себе этот GridView:
ABC
DEF
GHI
JKL
Серая линия представляет собой свиток ... если прокрутите эти новые элементы. Если я нажимаю B, он выбирает B, но также выбирает H.
Я попытался провести исследование, но проблемы, которые я нашел, были неодинаковыми.
Что-то, что могло бы помочь .. gridview, используемый для добавления повторяющихся элементов, поэтому, когда я добавляю элементы в gridview, я проверяю, имеет ли список элементов уже подобный элемент, если так я его не добавляю.
Но проблема в том, что я делаю к изменениям в слушатель, который находится внутри класса адаптера (это вложенный класс), поэтому у меня нет доступа к gridview внутри там –
, а затем просто используйте 'notifyDataSetChanged();' после внесения изменений. –
Да, я уже поставил notifiyDataSetChanged(); но другая (основная) проблема заключается в том, что она рисует некоторые значки, которых она не должна. –