gpt4 book ai didi

android - 在每行项目上包含 EditText 和 CheckBox 的 ListView 中的多点触控 (Android)

转载 作者:行者123 更新时间:2023-11-30 02:44:44 27 4
gpt4 key购买 nike

我有一个 ListView,其中每个行项目都有 EditText 和 CheckBox 元素。您可以在下面看到示例图片。

enter image description here我打算做的是

我想同时实现 OnItemClickListener(用于 ListView)和 OnClickListener(用于 EditText 和 CheckBox),即我希望在单击 ListView 项目(在 EditText 和 CheckBox 之外)时完成任务 A,并且我还想在单击时执行单独的任务分别是 EditText 和 CheckBox。

我的问题

如果没有在 ListView、EditText 或 CheckBox 上设置属性来控制焦点,那么默认行为是 ListView 行项目不会监听项目点击,但 EditText 和 CheckBox 正在获得焦点

关于使用这些属性和值(例如 - )

// to ListView
android:descendantFocusability="blocksDescendants"
// to EditText and CheckBox
android:focusable="false"
android:focusableInTouchMode="true"

监听器要么为 ListView 工作,要么为 EditText 工作。 CheckBox 点击监听器似乎在所有情况下都有效(奇怪)。我对此很陌生,我们将不胜感激。我现在无法发布源代码,为此请耐心等待。任何解决方案、建议或解释都会有很大帮助。

最佳答案

很高兴我碰巧解决了这个问题。我想做的是(让我再次清除它)我希望 EditText 可聚焦,此外我应该能够单击 ListView 的每一行以执行一些特定任务。好吧,我们不需要这些属性:

android:focusable=""  
android:focusableInTouchMode=""
android:descendantFocusability=""

简单的需要做的是
在您的自定义 ListAdapter 类中,为每个项目(例如 EditText、CheckBox 等)实现 OnClickListener,并实现 rootView 的 OnClickListener(即对于 ListView 行项目)。
例如:

public class CustomListAdapter extends ArrayAdapter<YOUR_OBJECT> {

Context context;

ArrayList<YOUR_OBJECT> itemlist = new ArrayList<YOUR_OBJECT>();

Integer resourceID;

ViewHolder holder;

public ServicesListAdapter(Context context, int resourceId, ArrayList<YOUR_OBJECT> itemlist) {
super(context, resourceId, itemlist);
this.itemlist.addAll(itemlist);
this.context = context;
this.resourceID = resourceId;
}

public class ViewHolder {
TextView name;
EditText editText;
CheckBox checkBox;
}

public View getView(final int position, View rootView, ViewGroup parent) {

LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

if (rootView == null) {

rootView = mInflater.inflate(resourceID, null);

holder = new ViewHolder();

holder.name = (TextView) rootView.findViewById(R.id.name);
holder.editText = (EditText) rootView.findViewById(R.id.port);
holder.checkBox = (CheckBox) rootView.findViewById(R.id.check_box);

// Add Listeners for EditText and CheckBox here

rootView.setTag(holder);

} else {
holder = (ViewHolder) rootView.getTag();
}

// Click Listener for the ListView row item
rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "Clicked" + position, Toast.LENGTH_SHORT).show();
}
});

// Do what rest you need to do with your ViewHolder

}
}

关于android - 在每行项目上包含 EditText 和 CheckBox 的 ListView 中的多点触控 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25260966/

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