【问题标题】:EditText focus in a ListViewListView 中的 EditText 焦点
【发布时间】:2012-07-10 13:17:39
【问题描述】:
我有一个ListView,在那个ListView 我有一个行,里面有一些TextViews 和EditTexts。
当我按下行上的任意位置时,我希望 EditText 获得焦点,以便输入文本。
问题是我无法让它工作。当我将EditText 放在ListView 中时,当我点击ListView 时OnItemClick 不会响应。
我尝试在EditText 上使用focusable="false",它允许我再次单击ListView,但即使将可聚焦设置为true,我也无法让EditText 获得焦点。
接下来我尝试在ListView 中使用android:descendantFocusability="beforeDescendants",但它似乎没有任何改变,它仍然不起作用。
有没有人知道我可以做些什么来让它发挥作用?
【问题讨论】:
标签:
android
listview
android-edittext
【解决方案1】:
试试这个,它应该让你点击一行并聚焦 EditText(从这个SO Answer修改):
public void onItemSelected(AdapterView<?> listView, View view, int position, long id)
{
EditText yourEditText = (EditText) view.findViewById(R.id.youredittextid);
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
yourEditText.requestFocus();
}
public void onNothingSelected(AdapterView<?> listView)
{
// onNothingSelected happens when you start scrolling, so we need to prevent it from staying
// in the afterDescendants mode if the EditText was focused
listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}
【解决方案2】:
这样做
ListView listView = (ListView) findViewById(R.id.yourListViewId);
listView.setItemsCanFocus(true);
listView.setClickable(false);
即,
从xml获取listview对象后,禁用该listview的点击,将焦点传递给子view
【解决方案3】:
你可以在xml行布局中添加一个属性为enabled="false",在onItemClickListener上你可以setEnabled(true)然后setFocusable(true),这应该可以解决。