Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在listView中单击TextView_Android - Fatal编程技术网

Android 无法在listView中单击TextView

Android 无法在listView中单击TextView,android,Android,我的代码是列出所有员工的个人信息,一旦我们点击电话号码,它就可以拨打这个号码。 但是,如何解决ListView中不可点击的TextView? 我需要按两下才能拨这个号码。。寻求帮助谢谢 主要活动 您应该将TextView#OnClickListener设置在适配器#getView内部,而不是ListView#OnItemClickListener内部 像这样: public View getView(int position, @Nullable View convertView, @NonNu

我的代码是列出所有员工的个人信息,一旦我们点击电话号码,它就可以拨打这个号码。 但是,如何解决ListView中不可点击的TextView? 我需要按两下才能拨这个号码。。寻求帮助谢谢

主要活动 您应该将TextView#OnClickListener设置在适配器#getView内部,而不是ListView#OnItemClickListener内部

像这样:

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;
                }