Android 无法在listView中单击TextView
我的代码是列出所有员工的个人信息,一旦我们点击电话号码,它就可以拨打这个号码。 但是,如何解决ListView中不可点击的TextView? 我需要按两下才能拨这个号码。。寻求帮助谢谢 主要活动 您应该将TextView#OnClickListener设置在适配器#getView内部,而不是ListView#OnItemClickListener内部 像这样:Android 无法在listView中单击TextView,android,Android,我的代码是列出所有员工的个人信息,一旦我们点击电话号码,它就可以拨打这个号码。 但是,如何解决ListView中不可点击的TextView? 我需要按两下才能拨这个号码。。寻求帮助谢谢 主要活动 您应该将TextView#OnClickListener设置在适配器#getView内部,而不是ListView#OnItemClickListener内部 像这样: public View getView(int position, @Nullable View convertView, @NonNu
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItemView = convertView;
if(listItemView == null){
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
//change background colours
listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.colorSkyBlue));
currentAgent = getItem(position);
TextView name_field = (TextView) listItemView.findViewById(R.id.name);
TextView website_field = (TextView) listItemView.findViewById(R.id.website);
final TextView phone_field = (TextView) listItemView.findViewById(R.id.phone);
name_field.setText(currentAgent.getName());
website_field.setText(currentAgent.getWebsite());
phone_field.setText(currentAgent.getPhone());
phone_field.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(agent.getPhone()));
startActivity(intent);
}
});
return listItemView;
}
编辑
您应该将活动实例添加到构造函数适配器中,以使用startActivity方法,因此假设“myActivity”是您的变量,应该如下所示
myActivity.startActivity(intent);
您必须通过以下方式执行简单的单击操作:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final SalesAgent agent = arrayList.get(position);
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(agent.getPhone()));
startActivity(intent);
}
});
}
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
final SalesAgent agent=arrayList.get(位置);
意向意向=新意向(意向.行动拨号);
setData(Uri.parse(agent.getPhone());
星触觉(意向);
}
});
}
您无需再次使用
TextView
的单击侦听器。ListView
中项目的位置可以从onItemClick
方法中的position
参数中检索。作为建议,最好使用recyclerview您必须在适配器中添加一个监听器,我希望我的示例sriva也提到这一点
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItemView = convertView;
if(listItemView == null){
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
//change background colours
listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.colorSkyBlue));
currentAgent = getItem(position);
TextView name_field = (TextView) listItemView.findViewById(R.id.name);
TextView website_field = (TextView) listItemView.findViewById(R.id.website);
final TextView phone_field = (TextView) listItemView.findViewById(R.id.phone);
//here add listener texview
phone_field.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// your code call phone
}
});
name_field.setText(currentAgent.getName());
website_field.setText(currentAgent.getWebsite());
phone_field.setText(currentAgent.getPhone());
return listItemView;
}
通过使用这种方式,我们是否只选择ListView项目而不是电话号码的TextView?您将检索列表中该项目的所有内容。实际上,有一个链接可以向web发出意向,因此如果使用您建议的方式,可能不太可取?我添加了getContext().startActivity(意向);
@Override
public View getView(final int position, View convertView, ViewGroup viewGroup) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout. list_item, null);
holder.name_field = (TextView) convertView.findViewById(R.id.name);
holder.website_field = (TextView) convertView.findViewById(R.id.website);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final CurrentAgent currentAgent = getItem(position);
holder.name_field.setText(currentAgent.getName());
holder.name_field.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// DO WHATEVER YOU WANT
}
});
return convertView;
}
public class ViewHolder {
TextView name_field;
TextView website_field;
}
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final SalesAgent agent = arrayList.get(position);
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(agent.getPhone()));
startActivity(intent);
}
});
}
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItemView = convertView;
if(listItemView == null){
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
//change background colours
listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.colorSkyBlue));
currentAgent = getItem(position);
TextView name_field = (TextView) listItemView.findViewById(R.id.name);
TextView website_field = (TextView) listItemView.findViewById(R.id.website);
final TextView phone_field = (TextView) listItemView.findViewById(R.id.phone);
//here add listener texview
phone_field.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// your code call phone
}
});
name_field.setText(currentAgent.getName());
website_field.setText(currentAgent.getWebsite());
phone_field.setText(currentAgent.getPhone());
return listItemView;
}