在ListView中添加item为WebView
2014-11-21 10:23
330 查看
今天在做一个demo,是要把一个WebView当做ListView的item加入到ListView中去,查找了点资料,然后自己实现了一个,发现是可以做出来的,只是在ListView中加入的这个WebView的上下滚动有点问题,好像是WebView的滚动条和ListView的滚动条冲突了,导致上下滑动不能响应WebView的滚动条,暂时还不知道怎么去解决,只是把这个效果做出来了
首先是布局文件的代码:
main.xml
web_item.xml ,这个是含有webView的的那个item的布局
item.xml,这个是正常的item的布局
MainActivity.java
MainActivity初始化了ListView等组件,然后把ListView要显示的数据源都添加到容器中,传给adapter
然后是MyAdapter的代码
上一下最后运行的效果图
首先是布局文件的代码:
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
web_item.xml ,这个是含有webView的的那个item的布局
<?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:orientation="vertical" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="300dp" /> </LinearLayout>
item.xml,这个是正常的item的布局
<?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:orientation="vertical" > <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp"/> </LinearLayout>
MainActivity.java
package com.slfly.webviewtest; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import android.widget.ListView; public class MainActivity extends Activity { private WebView webView; private List<String> lists; private ListView listView; private MyAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initDatas(); listView = (ListView) findViewById(R.id.listView); mAdapter = new MyAdapter(MainActivity.this,lists); listView.setAdapter(mAdapter); } public void initDatas(){ lists = new ArrayList<String>(); for(int i = 0 ; i< 20;i++){ String s = "item----" + i; lists.add(s); } } }
MainActivity初始化了ListView等组件,然后把ListView要显示的数据源都添加到容器中,传给adapter
然后是MyAdapter的代码
package com.slfly.webviewtest; import java.util.List; import android.content.Context; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private Context context; private List<String> lists; public MyAdapter(Context context, List<String> lists) { this.context = context; this.lists = lists; } @Override public int getCount() { return lists.size(); } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = bindView(position, convertView, parent); return convertView; } public View bindView(int position, View convertView, ViewGroup parent) { int itemType = getItemViewType(position); switch (itemType) { case 0: convertView = convertViewToWeb(convertView, parent); break; case 1: convertView = convertViewToItem(position, convertView, parent); break; } return convertView; } public View convertViewToWeb(View convertView, ViewGroup parent) { final WebHolder webHolder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.web_item, null); webHolder = new WebHolder(); webHolder.webView = (WebView) convertView .findViewById(R.id.webView); convertView.setTag(webHolder); } else { webHolder = (WebHolder) convertView.getTag(); } webHolder.webView.getSettings().setJavaScriptEnabled(true); webHolder.webView.requestFocus(); webHolder.webView.loadUrl("http://sina.cn/?from=www&ref=http%3A%2F%2Fwww.sina.com%2F"); /** 使webview自己处理打开网页事件,不调用系统浏览器打开*/ webHolder.webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); /**使webview能够响应back按键,点击back按键回退网页,不会退出整个Activity*/ webHolder.webView.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View view, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && webHolder.webView.canGoBack()){ webHolder.webView.goBack(); return true; } return false; } }); return convertView; } public View convertViewToItem(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) { convertView = LayoutInflater.from(context).inflate(R.layout.item, null); holder = new ViewHolder(); holder.tv = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(holder); } else if (convertView.getTag() instanceof ViewHolder) { holder = (ViewHolder) convertView.getTag(); } convertView.setTag(holder); holder.tv.setText(lists.get(position) + ""); return convertView; } @Override public int getItemViewType(int position) { if (position == 0) { return 0; } else { return 1; } } @Override public int getViewTypeCount() { return 2; } public class ViewHolder { public TextView tv; } public class WebHolder { public WebView webView; } }
上一下最后运行的效果图
相关文章推荐
- listview添加headerview需要注意的,listview自定义的item注意的焦点
- listview如果添加的有Headview和Footview,onItemClick数值异常问题
- listview如果添加的有Headview和Footview,onItemClick数值异常
- 详解:scrollview嵌套listview,而listview的item中是webview,导致listview不能在scrollview完全伸展开的问题
- 安卓ListView的Item中添加按钮后,点击Button获取点击行的TextView文本数据
- 利用RecycleView实现类似ListView的Item点击,长按等操作事件以及点击后每一项在添加一个列表
- 在ScollView中添加自定义的listView或者WebView 出现抢占焦点的问题
- 精通RecyclerView:打造ListView、GridView、瀑布流;学会添加分割线、 添加删除动画 、Item点击事件
- xlistview上拉和加载重新刷新+数据库添加字段+webview
- android中listview中添加多种itemview
- Android ListView添加多种类型的ItemView
- 在ListView中的Item点击时在其下面添加一个View
- listview如果添加的有Headview和Footview,onItemClick数值异常
- ListView Item 选中时 改变 TextView 的字体颜色
- 在ContextMenu中添加/删除ListView的Item
- comboBox,listview,DataGridView中添加Item
- WebView添加上下文菜单
- android 为 ListView Item中的组件添加事件 以及更新数据
- VB中给listview的item添加多行气泡式Tooltip
- ListView 动态删除添加Item方法