gpt4 book ai didi

android - 使用 Android,如何从包含 Button 控件的 ListView 中选择行

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:47 25 4
gpt4 key购买 nike

我有以下使用 ListView 的非常简单的测试程序。我创建了一个 ListView 并将其设置为内容 View 。我设置了一个提供行的 ListAdapter。一共有 30 行,每一行由一个 LinearLayout ViewGroup 组成。在那个 ViewGroup 中,我放置了一个 TextView 和一个 Button。当我运行该程序时,我发现我无法选择列表中的行。但是,我可以滚动列表并单击按钮。

如果我从 LinearLayout 中删除按钮(这样它只包含 TextView),那么我就可以选择列表的行。我会喜欢能够在我的个人行 View 上有按钮,并且仍然能够选择列表的行。在另一个论坛上,有人说这是可能的,但我不知道如何实现它。

谁能给我一个线索?

谢谢。

public class ListViewTest extends Activity implements ListAdapter 
{
int m_count;
DataSetObserver m_observer;

public ListViewTest()
{
m_count = 30;
m_observer = null;
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ListView lv = new ListView(this);
lv.setAdapter(this);
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
setContentView(lv);
}

@Override
public boolean areAllItemsEnabled() {
return true;
}

@Override
public boolean isEnabled(int position) {
return true;
}

@Override
public int getCount()
{
return m_count;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public int getItemViewType(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LinearLayout vg = new LinearLayout(this);

TextView tv = new TextView(this);
tv.setText("ListItem");

Button bv = new Button(this);
bv.setText("Button");

vg.addView(tv);
vg.addView(bv);

return(vg);
}

@Override
public int getViewTypeCount() {
return 1;
}

@Override
public boolean hasStableIds() {
return false;
}

@Override
public boolean isEmpty() {
return false;
}

@Override
public void registerDataSetObserver(DataSetObserver observer)
{
m_observer = observer;
}

@Override
public void unregisterDataSetObserver(DataSetObserver observer) {

}
}

最佳答案

正如其他答案所指出的,您是否可以自行选择 ListView 行作为完整项目取决于这些行是否包含可聚焦项目。但是,解决方案通常不是在您的按钮等上设置 focusable=false。这将阻止您的应用程序使用方向键、轨迹球、箭头键或您拥有的任何东西进行导航。

您希望您的列表项能够控制它们自己的焦点属性。你要setItemsCanFocus .这将禁用 ListView 通常用于将列表项视为单个单元的特殊焦点/选择处理。

现在,您可以在用作行中顶级元素的布局上设置一个监听器,在其上设置一个可绘制的有状态背景以显示焦点/按下状态,以及 focusLeft/Right 属性以控制焦点在其中移动项目本身。

关于android - 使用 Android,如何从包含 Button 控件的 ListView 中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3789943/

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