【问题标题】:Android - ListView with Spinner - cannot select the list item (as a whole)Android - 带有 Spinner 的 ListView - 无法选择列表项(作为一个整体)
【发布时间】:2014-08-29 11:36:37
【问题描述】:

在 ListView 中,每行包含 1 个文本视图和 1 个微调器。 微调器工作正常。

如何选择完整的列表行?那么,单击它并执行一些操作?

我尝试了 m_listview.setOnItemClickListener( new OnItemClickListener() { ... 并注册了一个长按/上下文菜单。 单击/长按...这些方法/侦听器永远不会被调用。

通过为按钮添加“android:focusable="false" 和 android:focusableInTouchMode="false"" 解决了类似的问题。 按钮起作用,可以选择列表项(行)。伟大的。 此解决方案不适用于其中包含微调器的列表行。

所以,我用一个按钮替换了微调器,再次添加了“focusable=false”。然后它适用于按钮。将其更改回微调器,不,无法选择行。

根据要求提供代码中最相关的部分:

1 - 行布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

  <TextView
      android:id="@+id/variable_name"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:ellipsize="end"
      android:singleLine="true"
      android:text=""
      android:focusable="false"
      android:focusableInTouchMode="false"
      android:textSize="12sp" />

     <Spinner
        android:id="@+id/variable_use_answer"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:entries="@array/variables_use_answers_short"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:textSize="12sp" />
 etc. 

2 - 带有列表和其他文本视图和按钮的片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingRight="10dp" >

<ListView
    android:id="@+id/variables_list"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_alignParentTop="true"
    android:layout_margin="5dp"
    android:layout_weight="1"
    android:scrollbars="vertical" />

<LinearLayout
    android:id="@+id/variables_buttons"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal"
    android:padding="4dp" >
    <Button
        android:id="@+id/waypoint_action"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12dp"
        android:text="Action A" />
   etc. 

3 - 适配器代码中最重要的部分:

@Override
public View getView(int position, View concertView, ViewGroup parent) {
    View view = null;
    if (concertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.waypoint_rowlayout, parent, false);
    } else { 
        view = (LinearLayout) concertView;
    }
    variableV = (TextView) view.findViewById( R.id.variable_name);
    useAnswerV = (Spinner) view.findViewById( R.id.variable_use_answer);
    useAnswerV.setOnItemSelectedListener( new OnItemSelectedListener() {
        @Override
        public void onItemSelected( AdapterView<?> parent, View view, int position, long id) {
            System.out.println( "Item: " + parent.getItemAtPosition( position).toString());
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) { };
    }); 
    return view;
}

4 - 片段代码(环绕代码)

onCreateView 
    ... 
    m_listview = (ListView) rootView.findViewById(R.id.variable_list);
    ... 
    adapter = new VariableAdapter( getActivity(), varList);
    m_listview.setAdapter( adapter);
    m_listview.invalidateViews();
    ....
    m_listview.setOnItemClickListener( new OnItemClickListener() {
         @Override
         public void onItemClick( AdapterView<?> a, View v, int position, long id) {
             // -----> N*E*V*E*R   C*O*M*I*N*G H*E*R*E* <----------- 
             VariableInfo var = (VariableInfo) m_listview.getAdapter().getItem( position);
             System.out.println( "Variable clicked on: " + var );
    });       

【问题讨论】:

  • 发布一些代码,以便我们了解问题所在。

标签: android android-listview android-spinner


【解决方案1】:

添加

android:descendantFocusability="blocksDescendants"

到行布局

【讨论】:

    【解决方案2】:

    你需要使用

    android:focusable=false
    android:focusableInTouchMode=false
    

    为您的 ListView Row 的所有自定义 UI。

    【讨论】:

    • 我已经这样做了,但这对 Spinner 没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多