2017-05-08 61 views
0

标签设置为一排我想设置一个标签的行(或至少一些行中,最好行虽然)。然后当我点击该行时,我可以得到标签。我认为这就是我必须做的事情,但无论我点击什么,标签总是为空。如何在自定义适配器的Android工作室的Java

我的代码示例显示了我在标签设定为一个TextView的尝试,因为我不知道如何将其设置为行。

这是我customAdapter类

int counter = 0; 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 

    View customView = layoutInflater.inflate(R.layout.my_row, parent, false); 

    ViewHolder holder = new ViewHolder(); 

    holder.name = (TextView)customView.findViewById(R.id.nameTextView); 
    holder.picture = (ImageView)customView.findViewById(R.id.pictureImageView); 

    holder.name.setText(allNames.get(position)); 
    holder.picture.setImageResource(allPictures.get(position)); 

    //This does not work ---> holder.name.setTag(counter); 

    counter ++; 
    return customView; 
} 

我getView代码这是我在不同的类

listVIew.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, final int position, long l) { 

      Toast.makeText(getApplicationContext(), "tag is " + view.getTag(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 

任何帮助,将不胜感激onClickListener。谢谢。

回答

1

试试这个,

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 

     View customView = layoutInflater.inflate(R.layout.my_row, parent, false); 

     ViewHolder holder = new ViewHolder(); 

     holder.name = (TextView)customView.findViewById(R.id.nameTextView); 
     holder.picture = (ImageView)customView.findViewById(R.id.pictureImageView); 

     holder.name.setText(allNames.get(position)); 
     holder.picture.setImageResource(allPictures.get(position)); 

     //This does not work ---> holder.name.setTag(counter); 

     customView.setTag(Integer.valueOf(counter)); 

     counter ++; 
     return customView; 
    } 
+0

工程。看着这个,我意识到我之前用精确的代码尝试过,但我不小心使用了“convertView”而不是“customView”。谢谢。 – Z10987654321X

1

试试这个:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 

    if(convertView == null) { 

     // inflate the layout 
     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     convertView = layoutInflater.inflate(R.layout.my_row, parent, false); 

     // set up the ViewHolder 
     holder = new ViewHolder(); 

     holder.name = (TextView) convertView.findViewById(R.id.nameTextView); 
     holder.picture = (ImageView) convertView.findViewById(R.id.pictureImageView); 

     // store the holder with the view. 
     convertView.setTag(holder); 

    } else { 
     // we've just avoided calling findViewById() on resource everytime 
     // just use the viewHolder 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.name.setText(allNames.get(position)); 
    holder.picture.setImageResource(allPictures.get(position)); 
    holder.name.setTag(counter); 

    counter++; 

    return convertView; 
} 
+0

此方法有效,但如果我从此页面切换回去并返回(但不使用Intent返回),则会出现错误。由于Krish的答案有效,所以没有必要修复我遇到的错误。尽管谢谢你的帮助。 – Z10987654321X

相关问题