0

我有一个需要点击的新列表,但这个列表不起作用。onListItemClick 永远不会被调用。我的应用程序中有另一个按预期工作,但我不知道有什么区别。我见过人们说要改变焦点,但我已经尝试了很多不同的方法,但没有任何效果。所以这里有一些代码。

在职的:

@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
    super.onListItemClick(l, v, position, id);

    // get the item that was clicked
    v_ProjectInvestigatorSiteContact project = (v_ProjectInvestigatorSiteContact) this.getListAdapter().getItem(
            position);

    Intent myIntent = new Intent(this, Details.class);

    myIntent.putExtra(res.getString(R.string.project), project);

    startActivity(myIntent);
}// onListItemClick

不工作:

    @Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
    super.onListItemClick(l, v, position, id);

    // get the item that was clicked
    final v_SitePeople vSitePeople = (v_SitePeople) this.getListAdapter().getItem(
            position);

    AlertDialog.Builder builder = new AlertDialog.Builder(Share.this);
    builder.setTitle(res.getString(R.string.forgot_password_check_dialog_title))
            .setMessage(res.getString(R.string.share_check_dialog_text))
            .setPositiveButton(res.getString(R.string.send), new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which)
                {
                    sendShareEmail(vSitePeople);
                }
            }).setNegativeButton(res.getString(R.string.cancel), new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which)
                {
                    // cancelled, so do nothing
                }
            });
    AlertDialog msgBox = builder.create();
    msgBox.show();
}// onListItemClick

工作 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffffff"
android:orientation="vertical" >

<!-- dummy item to prevent edittext from gaining focus on activity start -->

<LinearLayout
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/title_background" >

    <ImageView
        android:id="@+id/logo"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_logo" >
    </ImageView>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/logo" 
        android:gravity="center"
        android:paddingBottom="5dp"
        android:paddingLeft="50dp"
        android:paddingRight="60dp"
        android:paddingTop="5dp"
        android:text="@string/app_header"
        android:textColor="#ffffffff"
        android:textSize="15sp"
        android:textStyle="bold" />
</RelativeLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/search_gradient" >

    <ImageView
        android:id="@+id/searchBoxIcon"
        android:layout_width="38dp"
        android:layout_height="38dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:scaleType="centerCrop"
        android:src="@drawable/action_search" >
    </ImageView>

    <EditText
        android:id="@+id/searchBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="@+id/searchBoxIcon"
        android:layout_marginRight="8dp"
        android:layout_marginTop="4dp"
        android:layout_toRightOf="@+id/searchBoxIcon"
        android:background="@drawable/search_box"
        android:hint="@string/search_hint"
        android:inputType="text"
        android:maxLines="1"
        android:minHeight="30sp"
        android:paddingBottom="2dp"
        android:paddingLeft="25sp"
        android:paddingTop="2dp"
        android:textColor="#ff000000" />
</RelativeLayout>

<ListView
    android:id="@id/android:list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:background="@color/divider_gray"
    android:cacheColorHint="#00000000"
    android:divider="@color/divider_gray"
    android:dividerHeight="1dp"
    android:footerDividersEnabled="false"
    android:headerDividersEnabled="false" />

<TextView
    android:id="@+id/android:empty"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:text="@string/loading"
    android:textColor="@color/loading_gray"
    android:textSize="20sp" />

</LinearLayout>

不工作的 XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffffff"
android:orientation="vertical" >

<!-- dummy item to prevent edittext from gaining focus on activity start -->

<LinearLayout
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/title_background" >

    <ImageView
        android:id="@+id/logo"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_logo" >
    </ImageView>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/logo"
        android:gravity="center"
        android:paddingBottom="5dp"
        android:paddingLeft="50dp"
        android:paddingRight="60dp"
        android:paddingTop="5dp"
        android:text="@string/share_header"
        android:textColor="#ffffffff"
        android:textSize="15sp"
        android:textStyle="bold" />
</RelativeLayout>

<ListView
    android:id="@id/android:list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:background="@color/divider_gray"
    android:cacheColorHint="#00000000"
    android:divider="@color/divider_gray"
    android:dividerHeight="1dp"
    android:footerDividersEnabled="false"
    android:headerDividersEnabled="false" />

<TextView
    android:id="@+id/android:empty"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:text="@string/loading"
    android:textColor="@color/loading_gray"
    android:textSize="20sp" />

</LinearLayout>

以下是有关损坏的工作原理的更多信息,以防万一您需要更多代码。

不工作行 XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:layout_weight="1"
android:baselineAligned="false"
android:orientation="vertical"
android:padding="6dp"
android:background="#ffffffff"
android:layout_margin="10dp" >

<TextView
    android:id="@+id/toptext"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_toLeftOf="@id/moreInfo"
    android:gravity="center_vertical"
    android:minHeight="20sp"
    android:textColor="#ff000000"
    android:textStyle="bold" />

</RelativeLayout>

不工作视图适配器

    @Override
public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder = null;
    if (convertView == null)
    {
        holder = new ViewHolder();

        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = vi.inflate(R.layout.share_row, null);
        convertView.setTag(holder);
    }// if
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    v_SitePeople i = items.get(position);

    if (i != null)
    {
        TextView topText = (TextView) convertView.findViewById(R.id.toptext);
        topText.setGravity(Gravity.CENTER_VERTICAL);
        topText.setMinHeight(40);
        if (topText != null)
        {
            if (i.SitePerson != null)
            {
                if (i.PersonTitle != null)
                {
                    topText.setText(String.format(i.SitePerson + ", " + i.PersonTitle));
                }
                else
                {
                    topText.setText(i.SitePerson);
                }
            }// if has ProtocolNumber
            else
            {
                if (i.Nickname != null)
                {
                    topText.setText(i.Nickname);
                }
            }// if does not have ProtocolNumber
        }// if
    }// if
    return convertView;
}// getView

非常感谢你的帮助。

4

3 回答 3

1

我想到了。我从未发布过相关代码,或者我相信你们会为我找到它。

我的不工作的适配器有一个从我的工作适配器复制的 isEnabled 方法,该方法禁用了类型 0 的项目。但是由于我的新列表只是一种类型,所以所有内容都被禁用了。

很抱歉给您带来麻烦,并感谢您的努力。

于 2013-07-15T19:28:17.507 回答
0

您尚未显示初始化列表和适配器的位置,但您需要确保设置了 onClickListner。就像是:

myListView.setOnItemClickListener(this);

编辑:'this'假设初始化是在与单击侦听器出现的同一类中完成的。

于 2013-07-11T22:57:19.360 回答
0

使用 ListView 时,主要有两种布局:

1)你有你的 listView 的布局

例子:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="?attr/actionBarSize"
    android:clickable="false"
    >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:background="@android:color/transparent"
        android:clipToPadding="false"
        android:paddingLeft="@dimen/list_left_padding"
        android:paddingRight="@dimen/list_right_padding"
        android:paddingTop="@dimen/list_separator"
        android:dividerHeight="@dimen/list_separator"
        android:paddingBottom="@dimen/list_separator" />


</RelativeLayout>

2) 包含 ListView 的每个项目的布局。

例子:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/white_responsive"
    android:descendantFocusability="blocksDescendants"
    >

    <RelativeLayout
        android:id="@+id/sampleItem"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="3dp"
        android:clipToPadding="false">

            <com.devspark.robototextview.widget.RobotoTextView
                android:id="@+id/textViewSample"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:paddingBottom="5dp"
                android:text="Sample Text"
                android:textSize="17sp"
                app:typeface="roboto_regular" />

    </RelativeLayout>
</RelativeLayout>

如果您在 StackOverFlow 上搜索有关此问题的信息,您将获得以下说明来解决它:

1) 添加

android:descendantFocusability="blocksDescendants" 

到布局的根目录

2) 添加

android:clickable="false"
android:focusable="false"

到您的项目。

您可以分别使用这两个选项。第一个帮助了我。但是,您需要注意需要将这些属性放在 XML 文件中的什么位置。将它们放在您的 ITEM 布局中,而不是在您的 ListView 布局中。我这么说是因为我使用了那个解决方案,但是我输入了错误的 xml。所以,只要注意,它就会很好地工作。

于 2014-09-26T02:35:39.423 回答