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

Joh*_*aby 4 android

我有以下非常简单的使用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)

ada*_*amp 5

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

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

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

  • 你能举个例子吗?我正在使用带有ImageButton的ListView.我希望ImageButton具有特定的单击行为,并且List的其余部分具有不同的单击行为. (2认同)