Android listview-在单击项目时访问viewHolder元素
我有一个带有viewHolder的customAdapter,其中包含一个customView(圆形) 我需要检索视图持有者中包含的视图的颜色,而不是对象项 我该怎么做? 多谢各位 我的适配器:Android listview-在单击项目时访问viewHolder元素,android,listview,Android,Listview,我有一个带有viewHolder的customAdapter,其中包含一个customView(圆形) 我需要检索视图持有者中包含的视图的颜色,而不是对象项 我该怎么做? 多谢各位 我的适配器: public class WelcomeAdapter extends BaseAdapter { // contex private Context context; // Liste a affichée private RealmList<Measure> welcomeList;
public class WelcomeAdapter extends BaseAdapter {
// contex
private Context context;
// Liste a affichée
private RealmList<Measure> welcomeList;
public RealmList<WelcomeList> getWelcomeList() {
return welcomeList;
}
private LayoutInflater inflater = null;
private int color1;
private int color2;
private int color3;
public WelcomeAdapter (Context context, RealmList<Welcome> welcomeList) {
this.context = context;
this.welcomeList= welcomeList;
color1= ContextCompat.getColor(context, R.color.green);
color2= ContextCompat.getColor(context, R.color.yellow);
color3= ContextCompat.getColor(context, R.color.blue);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return welcomeList== null ? 0 : welcomeList.size();
}
@Override
public Object getItem(int position) {
return welcomeList== null ? null : welcomeList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.row_welcome, parent, false);
viewHolder = new ViewHolder();
viewHolder.cs = (CircleShape) convertView.findViewById(R.id.row_welcome_cv);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Welcome welcome= WelcomeList.get(position);
if (welcome.getWelcomePeople() != null) {
for (People p : welcome.getWelcomePeople()) {
if (p.getNumber() > 5) {
viewHolder.cs.setColor(color1);
} else if (p.getNumber() > 15) {
viewHolder.cs.setColor(color2);
} else if (p.getNumber() > 25) {
viewHolder.cs.setColor(color3);
}
}
}
return convertView;
}
class ViewHolder {
CircleShape cs;
}
公共类WelcomeAdapter扩展了BaseAdapter{
//contex
私人语境;
//列一份附件
私有RealmList福利列表;
公共RealmList getWelcomeList(){
返回福利名单;
}
专用充气机=空;
私人int color1;
私人int color2;
私人int color3;
公共WelcomeAdapter(上下文上下文,RealmList welcomeList){
this.context=上下文;
this.welcomeList=welcomeList;
color1=ContextCompat.getColor(context,R.color.green);
color2=ContextCompat.getColor(context,R.color.yellow);
color3=ContextCompat.getColor(context,R.color.blue);
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
@凌驾
public int getCount(){
返回welcomeList==null?0:welcomeList.size();
}
@凌驾
公共对象getItem(int位置){
返回welcomeList==null?null:welcomeList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
convertView=充气机。充气(R.layout.row_welcome,parent,false);
viewHolder=新的viewHolder();
viewHolder.cs=(圆形)convertView.findViewById(R.id.row\u welcome\u cv);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
Welcome=WelcomeList.get(位置);
if(welcome.getWelcomePeople()!=null){
用于(p:welcome.getWelcomePeople()){
如果(p.getNumber()>5){
viewHolder.cs.setColor(color1);
}else if(p.getNumber()>15){
viewHolder.cs.setColor(color2);
}else if(p.getNumber()>25){
viewHolder.cs.setColor(color3);
}
}
}
返回视图;
}
类视图持有者{
圆形cs;
}
活动
protected AdapterView.OnItemClickListener welcomeClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// need to retrieve the current color of the CircleShape of the view holder associated with the item clicked there
}
};
protected AdapterView.OnItemClickListener welcomeClickListener=new AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//需要检索与在此处单击的项目关联的视图保持架的圆圈形状的当前颜色
}
};
非常感谢如果我没有弄错的话,您应该能够通过调用返回给您的视图上的
getTag()
来检索视图持有者,因为您正在使用convertView.setTag(viewHolder)
因此,您的onItemClick
方法获得圆形
应该如下所示:
ViewHolder vh = (ViewHolder) view.getTag();
CircleShape cs = vh.cs;
让我知道这是否有效,我对适配器有点生疏。回答正确。此外,您需要确保
活动
和适配器
在同一个包中(因为OP当前的ViewHolder
具有包保护的可见性),或者使ViewHolder
成为公共类。