我有一个包含文章列表的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>
答案 0 :(得分:2)
您正在使用一行布局浪费资源。想一想:你在所有行中创建一个WebView,但是你会立即将它们隐藏起来(超过90%)......相反,你应该通过覆盖这些方法来使用具有两个行布局的自定义适配器:
@Override
public int getItemViewType(int position) {
return position % 11 == 0 ? 1 : 0;
}
@Override
public int getViewTypeCount() {
return 2;
}
接下来在getView()
或newView()
内检查您应加载哪种类型的布局。当getItemViewType()
返回0时膨胀新闻项布局,并在返回1时使WebView(自身)膨胀。
除了更快,更有条理之外,您的WebView现在拥有自己的行,并且应该很好。
答案 1 :(得分: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);