我有一个列表视图,它的每一行都有3个按钮(Click able Image Views),如果单击它们则会执行不同的操作。
我遇到了麻烦,因为我不知道如何识别用户是否单击了删除按钮或编辑元素。我的意思是,我如何获得用户选择的视图?
我尝试使用onItemClick的参数,但我陷入了困境。
public void onItemClick(AdapterView<?> av, View v, int pos, long id)
感谢。
答案 0 :(得分:1)
我确实喜欢与LinearLayout
合作并执行以下操作:
private void setElements() {
for (Element elem : listElements) {
View view = li.inflate(R.layout.item_3_object, null);//view represents a line from your list
Button bt1 = (Button) view.findViewById(R.id.bt1);
Button bt2 = (Button) view.findViewById(R.id.bt2);
Button bt3 = (Button) view.findViewById(R.id.bt3);
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// your code
}
});
// set listeners for the other buttons too
listView.addView(view); //is the LinearLayout element to fill with lines
}
}
答案 1 :(得分:1)
尝试在按钮和onClickListener调用view.getTag()。
中添加标签答案 2 :(得分:0)
private Button button;
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
button1Action(); // do your action here
}
});
答案 3 :(得分:0)
由于您希望将ListView
行中的元素设置为可点击,因此您已将其定义为view
这样:即您用Adapter
来夸大view
< / p>
public View getView(int position, View convertView, ViewGroup parent)
{
ContentHolder chld=null;
View row = convertView;
final int p=position;
ContactModel rowItem = getItem(position);
if(row==null)
{
chld=new ContentHolder();
LayoutInflater inflate=(LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
row=inflate.inflate(textViewResourceId,null);
chld.btn=(Button)row.findViewById(R.id.listViewButton_http);
row.setTag(chld);
}else{
chld=(ContentHolder) row.getTag();
}
Button b1=(Button)row.findViewById(R.id.listViewButton_http);
b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
}
});
//similary call your other Button here and it is DONE
}
希望这可以提供帮助
答案 4 :(得分:0)
view-parameter是你想要的那个。
v.getId()
为您提供点击按钮的ID。
例如,使用:
if(v.getId() == R.id.buttonDelete) {
//your code for delete button here
}