我有以下非常简单的使用ListView的测试程序.我创建一个ListView并将其设置为内容视图.我设置了一个提供行的ListAdapter.有30行,每行包含一个LinearLayout ViewGroup.在ViewGroup中,我放置了一个TextView和一个Button.当我运行程序时,我发现我无法选择列表的行.但是,我可以滚动列表并单击按钮.
如果我从LinearLayout中删除该按钮(以便它只包含TextView),那么我可以选择列表的行.我希望能够在我的各个行视图上有按钮,并且仍然可以选择列表的行.在另一个论坛上,有人说这是可能的,但我不知道如何实现它.
任何人都可以给我一个线索吗?
谢谢.
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) {
}
}
Run Code Online (Sandbox Code Playgroud)
正如其他答案所指出的那样,您是否可以自己选择ListView行作为完整项目取决于这些行是否包含可聚焦项目.但是,解决方案通常不会在按钮等上设置focusable = false.这将阻止您的应用程序使用d-pad,轨迹球,箭头键或您拥有的内容进行导航.
您希望列表项能够控制自己的焦点属性.你想要的setItemsCanFocus.这将禁用ListView通常用于将列表项视为单个单元的特殊焦点/选择处理.
现在,您可以在用作行中顶级元素的布局上设置侦听器,在其上设置可绘制的有状态背景以显示焦点/按下状态,以及focusLeft/Right属性以控制项目本身内的焦点移动.
| 归档时间: |
|
| 查看次数: |
4470 次 |
| 最近记录: |