问题描述
View 为一个 ListView
两个按钮(例如执行:呼叫、发送短信)。我想为点击按钮设置一个监听器。我的理解是,如果我设置了 OnItemSelectedListener
,我将不知道点击了两个按钮中的哪一个。
当我为一个按钮设置监听器时,当我点击它时,我会得到列表中最后一项(不是我点击的那个)中相应按钮的监听器(这在编程上是有意义的)但是这不是我想要的。我可以判断,因为它总是调用属于列表中最后一项的号码。
关于如何为每个项目中的多个视图设置 OnClick
的任何提示?
@NonNull
@Override
public View getView(final int position,@Nullable final View convertView,@NonNull ViewGroup parent) {
LayoutInflater inf = ((Activity)context).getLayoutInflater();
View view = inf.inflate(R.layout.place,parent,false);
name = view.findViewById(R.id.name);
type = view.findViewById(R.id.type);
minAge = view.findViewById(R.id.minAge);
open = view.findViewById(R.id.open);
close = view.findViewById(R.id.close);
distance = view.findViewById(R.id.distance);
phone = view.findViewById(R.id.phone);
picture = view.findViewById(R.id.picture);
btnCall = view.findViewById(R.id.btnCall);
final Place place = placeList.get(position);
// btnCall.setonClickListener(this);
// I tried both setups with the same result.
// the button is always the one belonging to the last item in the list.
btnCall.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String s = btnPhone.getText().toString();
}
});
// another button would have its own OnClick
name.setText(place.getName());
type.setText(place.getType());
minAge.setText(Integer.toString(place.getMinAge()));
open.setText(Integer.toString(place.getopen()));
close.setText(Integer.toString(place.getClose()));
distance.setText(Integer.toString(place.getdistance()));
phone.setText(place.getPhone());
int id = context.getResources().getIdentifier("place"+position,"drawable",((Activity)context).getPackageName());
//row_pic.setimageResource(id);
return view;
}
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + phone.getText()));
if (intent.resolveActivity(context.getPackageManager()) != null) {
context.startActivity(intent);
}
if (intent.resolveActivity(context.getPackageManager()) != null)
{
context.startActivity(intent);
}
}
解决方法
我在发布问题后找到了解决方案。 使用标签传递数据。
''' phone.setText(place.getPhone()); btnCall.setTag(phone.getText().toString());
btnCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String s = (String) ((Button) view).getTag().toString();
// now I can call the correct number
}
});
'''