3

記事のリストがあるListViewがあります。X件の記事(現在10件)ごとに、広告を表示するWebViewがあります。WebViewが表示されているもののすぐ上にあるものを除いて、任意のリスト項目をクリックできます。それは私のクリックを登録しません。

WebViewを表示または非表示にするコード:

if(position % 10 == 0) // || position == 0) && position > 0
{
    viewHolder.adView.loadUrl(tmpAdURL);
    viewHolder.adView.setVisibility(View.VISIBLE);
}
else
{
    viewHolder.adView.setVisibility(View.GONE);
    viewHolder.adView.invalidate();
}

main.xml

<ListView android:id="@+id/articles_list"
    style="@style/ListView"
    android:fadingEdge="vertical"
    android:fadingEdgeLength="16dp"
    android:divider="@color/extreme_light_gray"
    android:dividerHeight="1dp" />

MainActivty.javaのonCreate()のリスナー:

articleEntryListView.setOnItemClickListener(new OnItemClickListener()
{
    public void onItemClick(AdapterView<?> parent, View v, int position, long id)
    {
        Log.d("MINE", "ARTICLE CLICKED");
    }
}

article_entry_list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minHeight="60dp" >

    <!-- Title of the news entry -->

    <ImageView
        android:id="@+id/article_thumbnail"
        android:layout_width="90dp"
        android:layout_height="80dp"
        android:layout_alignParentRight="true"
        android:adjustViewBounds="true"
        android:contentDescription="@string/articleThumbnail"
        android:cropToPadding="true"
        android:paddingRight="10dp"
        android:paddingBottom="10dp"
        android:paddingTop="10dp"
        android:paddingLeft="0.5dp"
        android:scaleType="centerCrop" />
        <!-- WAS: android:padding="0.5dp" -->



    <LinearLayout
        android:id="@+id/article_row"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_marginRight="5dp"
        android:layout_toLeftOf="@id/article_thumbnail"
        android:minHeight="80dp"
        android:orientation="vertical"
        android:padding="10dp" >

        <TextView
            android:id="@+id/article_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/articleTitle"
            android:textColor="@drawable/list_title_selector"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/article_subtitle"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/articleSubtitle"
            android:textColor="@drawable/list_subtitle_selector"
            android:textSize="10sp" />
    </LinearLayout>

    <WebView
        android:id="@+id/article_ad"
        android:layout_width="match_parent"
        android:layout_height="90dp"
        android:background="@color/meddark_gray"
        android:layout_below="@+id/article_thumbnail"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:padding="10dp" />

</RelativeLayout>
4

2 に答える 2

2

1行のレイアウトを使用してリソースを浪費しています。考えてみてください。すべての行にWebViewを作成しますが、90%の確率ですぐに非表示にします...代わりに、次のメソッドをオーバーライドして、2つの行レイアウトを持つカスタムアダプターを使用する必要があります。

@Override
public int getItemViewType(int position) {
    return position % 11 == 0 ? 1 :  0;
}

@Override
public int getViewTypeCount() {
    return 2;
}

次に内部に入るgetView()newView()、ロードするレイアウトのタイプを確認します。0を返す場合はニュースアイテムのレイアウトを膨らませ、getItemViewType()1を返す場合はWebViewを(単独で)膨らませます。

より高速で整理されていることに加えて、WebViewには独自の行があり、うまく機能するはずです。

于 2012-12-03T19:23:14.743 に答える
0

CheckBoxこれは、リストアイテムので発生した問題に似ている可能性があります。リストアイテムXMLのandroid:focusable="false"オプションを使用してみてください。WebView

私の場合、CheckBoxはリストアイテムから焦点を合わせていて、何らかの理由でイベントが発生するのを妨げていました。

http://developer.android.com/reference/android/view/View.html#attr_android:focusable

<WebView
    android:id="@+id/article_ad"
    android:layout_width="match_parent"
    android:layout_height="90dp"
    android:background="@color/meddark_gray"
    android:layout_below="@+id/article_thumbnail"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:padding="10dp"
    android:focusable="false" />

コードビハインドでこれを行うこともできます

setFocusable(false);
于 2012-12-03T19:13:04.003 に答える