gpt4 book ai didi

java - 无法选择 ListView 项目

转载 作者:行者123 更新时间:2023-11-30 03:30:09 25 4
gpt4 key购买 nike

我有一个使用自定义适配器的 ListView。 ListView 中的每个元素都包含一个 RadioButton 和一个 TextView。

这是我的适配器,它需要一个 Employees 的 ArrayList(一个当前只包含名称的对象):

public class EmployeeAdapter extends ArrayAdapter<Employee> {

private ArrayList<Employee> listEmployees;

// Give the adapter the context and layout we are operating it, as well as a list of employees to put in the list.
public EmployeeAdapter(Context context, int layout, ArrayList<Employee> listEmployees) {
super(context, layout, listEmployees);
this.listEmployees = listEmployees;
}

// We override the basic getView function since our list is custom.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;


// If there is nothing left to put in the view, inflate the view in the rowemployee layout.
if (v == null){
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.rowemployees, null);
}

Employee i = listEmployees.get(position);

// Check if there's still an employee in the list.
if (i != null){
TextView name = (TextView) v.findViewById(R.id.text_employeename);
name.setText(i.getName());

}

// Alternate row colors.
if (position % 2 == 0) {
v.setBackgroundColor(Color.parseColor("#FFFFFF"));
} else {
v.setBackgroundColor(Color.parseColor("#e5fff4"));
}



return v;

}
}

这是我的 XML 布局中的 ListView 声明:

<ListView android:id="@+id/employees_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="2dp"
android:paddingRight="1dp"
android:background="@drawable/borderlist"
android:choiceMode="singleChoice"
android:listSelector="#48ad82"
android:layout_below="@id/employees_header">
</ListView>

这里是 ListView 的每个项目的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_employee"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingTop="13dp"
android:paddingBottom="13dp"
android:descendantFocusability="blocksDescendants">

<RadioButton android:id="@+id/radio_employee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:focusable="false"/>

<TextView
android:id="@+id/text_employeename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_toRightOf="@id/radio_employee"
android:layout_marginTop="3dp"
android:layout_marginLeft="5dp"
android:focusable="false" />

</RelativeLayout>

我将一堆 Employee 对象输入到一个 ArrayList 中,然后将其推送到适配器,然后在列表上设置一个 setOnItemClickListener。监听器包含此代码:

OnItemClickListener onItemClickListener_employee
= new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Toast.makeText(getApplicationContext(), String.valueOf(view.isSelected()) , Toast.LENGTH_SHORT).show();
}


};

view.isSelected() 总是返回 false。为什么?几个小时以来,我一直在尝试弄清楚如何在包含除 TextView 以外的内容的列表中选择一个元素,而且 SDK 文档不是很有用,它已经过时了。

当我按下列表的项目时,似乎按下了 TextView 或 RadioButton。 focusable="false"不应该阻止这种情况 ( Android custom ListView unable to click on items ) 吗?

最佳答案

要选择项目,请将以下方法添加到您的适配器(未经测试的代码):

public Employee getItemAt(int position){
return listEmployees.get(position);
}

然后在您的处理程序中,将位置传递给上面的新适配器方法

public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Employee e = adapter.getItemAt(position); //or whatever your adapter instance is named
Toast.makeText(getApplicationContext(), e.getName(), Toast.LENGTH_SHORT).show();
}

由于 View 仅用于显示数据,您实际上并不关心 View 本身(除非您想要删除它、突出显示它等)。

关于java - 无法选择 ListView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17584345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com