Android ListView未检测到选择

时间:2014-06-20 03:52:20

标签: android listview android-listview onitemclicklistener

我很难过。这个很简单,我错过了一些简单的东西但是我没有到达任何地方。

我有一个ListView,其中包含非常简单的项目 - TextView包含“N. name”形式的文本,其中N是列表中的位置,name是关联对象的名称。我创建了一个ListAdapter,将该信息显示在ListView中。

演示文稿似乎工作正常。这是我点击一行不起作用的部分。我只是没有得到通知。如果我在项目上设置了一个onClickListener(当它在适配器中生成时),我会收到通知,但是让我按照我喜欢的方式进行工作是令人费解的。我尝试了很多东西 - 改变后代的可聚焦性,启用,禁用,将itemsCanFocus设置为false,......但是没有任何运气。

我已经包含了用于配置视图和ListView中元素的相关代码。

特别是,我要做的是在点击一行时调用OnItemClickLister.onItemClick()。对我做错了什么的想法?

的活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    model = FZMModel.getInstance(this);
    setContentView(R.layout.activity_deploy);

    TextView viewTitle = (TextView) findViewById(R.id.deploy_header);

    if (model.getProfiles().size() == 0) {
        viewTitle.setText(R.string.deploy_header_create);
    } else {
        viewTitle.setText(R.string.deploy_header_choose);
    }

    profileListView = (ListView) findViewById(R.id.profileListView);
    profileListAdapter = new ProfileListAdapter(this, model);
    profileListView.setAdapter(profileListAdapter);

    profileListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            Log.d(TAG, String.format("Item %d selected (with id=0x%x)", position, id));
        }
    });
}

适配器: ...来自getView()的相关代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final Profile profile = model.getProfileAtIndex(position);
    final int rowNum = position;

    if (convertView == null) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.profile_list_layout, parent, false);
    }

    TextView profileIndexView;
    TextView profileNameView;

    profileIndexView = (TextView) convertView.findViewById(R.id.profileIndexLabel);
    profileNameView = (TextView) convertView.findViewById(R.id.profileNameLabel);

    profileIndexView.setText(String.format("%d.", position));
    profileNameView.setText(profile.getName());

//     convertView.setOnClickListener(new View.OnClickListener() {
//         @Override
//         public void onClick(View view) {
//             Toast.makeText(context, String.format("Did select row #%d (index=%d)",rowNum, profile.getPosition()), Toast.LENGTH_SHORT).show();
//         }
//     });
    return convertView;
}

活动布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.nsn.flexizonemobile.FZMConcreteActionDeploy"
    tools:ignore="MergeRootFrame" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="@string/deploy_header_choose"
        android:id="@+id/deploy_header"
        android:layout_margin="10dp"
        android:layout_centerHorizontal="true" />

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/profileListView"
        android:layout_gravity="left|top"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="0dp"
        android:choiceMode="none"
        android:layout_below="@+id/deploy_header"
        android:divider="@android:color/darker_gray"
        android:dividerHeight="2dp"
        android:clickable="true"
        android:descendantFocusability="beforeDescendants" />

</RelativeLayout>

profile_list_layout布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="@dimen/profile_index_width"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="A.         "
        android:id="@+id/profileIndexLabel"
        android:gravity="center_vertical|right"
        android:layout_centerVertical="true"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:textSize="24sp"
        android:textIsSelectable="true"
        android:layout_alignParentStart="false"
        android:layout_alignParentTop="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Profile Name"
        android:id="@+id/profileNameLabel"
        android:layout_alignParentLeft="false"
        android:layout_alignParentTop="false"
        android:gravity="center_vertical"
        android:layout_toRightOf="@+id/profileIndexLabel"
        android:layout_marginLeft="10dp"
        android:layout_centerVertical="true"
        android:textSize="24sp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

从ListView中删除以下属性:

android:choiceMode="none"
android:clickable="true"
android:descendantFocusability="beforeDescendants"

android:layout_width="wrap_content"
android:layout_height="wrap_content"

在这种情况下(特别是身高)没有任何意义

答案 1 :(得分:1)

在您的充气机布局的textview中添加:

android:focusable="false"
android:focusableInTouchMode="false"

并且在充气机的父布局中,即在充气机的相对布局中添加:

android:descendantFocusability="blocksDescendants" 

删除:

android:descendantFocusability="beforeDescendants"
从列表视图中

。并将listview的高度设置为match_parent将解决您的问题。