listview+webview

这篇博客介绍了如何在Android应用中结合ListView和WebView使用。首先展示了一个自定义适配器MyAdapter,该适配器用于填充ListView,显示包含标题、创建时间和来源名称的数据。接着,博主展示了如何创建一个MyActivity,该活动内嵌一个WebView,用于加载从Intent传递过来的URL。通过设置WebView的WebSettings,允许JavaScript执行,并加载指定网页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends AppCompatActivity {

    private ListView list;
    private List<MyBean.DataBean> data = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
        ImageLoader.getInstance().init(configuration);
        list = (ListView) findViewById(R.id.list);
        MyTask task = new MyTask();
        //开启异步
        task.execute("");
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(MainActivity.this, MyActivity.class);

                Log.e("==========",   data.get(i).getTitle()+"");
               /* intent.putExtra("title", b.getTitle());
                intent.putExtra( "name", b.getSource_name());
                intent.putExtra("time",b.getCreate_time());*/
                intent.putExtra("url",data.get(i).getUrl());
                intent.putExtra("web","http://shouyoutoutiao.app.17wanba.com");
                startActivity(intent);
            }
        });

    }

    //异步任务
    class MyTask extends AsyncTask<String, Integer, MyBean> {


        @Override
        protected MyBean doInBackground(String... strings) {
            Gson gson = new Gson();
            MyBean bean = gson.fromJson(getJsonString(), MyBean.class);
            return bean;
        }

        @Override
        protected void onPostExecute(MyBean myBean) {
            super.onPostExecute(myBean);
            data = myBean.getData();
            Log.e("========",data.toString());
            MyAdapter adapter = new MyAdapter(data, MainActivity.this);
            list.setAdapter(adapter);

        }
    }

    public String getJsonString() {
        String path = "http://shouyoutoutiao.app.17wanba.com/toutiao/get_list";
        try {
            URL url = new URL(path);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            if (connection.getResponseCode() == 200) {
                InputStream is = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                String str = "";
                String string = "";
                while ((str = reader.readLine()) != null) {
                    string += str;
                }
                return string;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }


        return null;
    }


}




//适配器


public class MyAdapter extends BaseAdapter {
    private List<MyBean.DataBean> arr = new ArrayList<>();
    private Context context;
    private ImageLoader loader;

    public MyAdapter(List<MyBean.DataBean> arr, Context context) {
        this.arr = arr;
        this.context = context;
        loader = ImageLoader.getInstance();
    }

    @Override
    public int getCount() {
        return arr.size();
    }

    @Override
    public Object getItem(int i) {
        return arr.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder = null;
        if (view == null) {
            view = View.inflate(context, R.layout.list_item, null);
            holder = new ViewHolder();
            holder.im = view.findViewById(R.id.im);
            holder.tv1 = view.findViewById(R.id.tv1);
            holder.tv2 = view.findViewById(R.id.tv2);
            holder.tv3 = view.findViewById(R.id.tv3);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        holder.tv1.setText(arr.get(i).getTitle());
        if (arr.get(i).getImg() != null && arr.get(i).getImg().size() > 0) {
            loader.displayImage(arr.get(i).getImg().get(0).url, holder.im);
        }
        holder.tv2.setText(arr.get(i).getCreate_time());
        holder.tv3.setText(arr.get(i).getSource_name());

        return view;
    }

    static class ViewHolder {
        TextView tv1, tv2, tv3;
        ImageView im;
    }
}




webview

public class MyActivity extends Activity {

    private WebView web;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myaitivity_item);
      /*  ImageLoader loader =  ImageLoader.getInstance();
        TextView tv11 = findViewById(R.id.tv11);
        TextView tv22 = findViewById(R.id.tv22);
        TextView tv33 = findViewById(R.id.tv33);*/
        web = findViewById(R.id.web);
      /* ImageView im = findViewById(R.id.im);
        String title = intent.getStringExtra("title");
        String name = intent.getStringExtra("name");
        String time = intent.getStringExtra("time");
        loader.displayImage(url,im);
        tv11.setText(title+"aaa");
        tv22.setText(name);
        tv33.setText(time);
        web.loadUrl("http://shouyoutoutiao.app.17wanba.com");*/
        initWebView();
    }

    private void initWebView() {
        Intent intent = getIntent();
        String url = intent.getStringExtra("url");
        String webstring = intent.getStringExtra("web");
        WebSettings webSettings = web.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        //在webview打开连接
        web.setWebViewClient(new WebViewClient());
        web.loadUrl(webstring + url);

    }
}



尝试着写web下的listview控件,listview一般有四种显示模式——平铺、图标、列表和详细信息。这些显示模式唯一的共同点就是数据是相同的,显示效果完全不一样。这时候xml的优势就完全体现出来了。 第一步,就是建立一个自定义格式的xml,用来保存listview数据 第二步,xsl可以解析xml生成html,所以就针对listview的每一种显示效果设计了一个对应的xsl。这样前面定义的xml数据和不同的xsl一起就可以显示出不同的效果。 第三步,htc在开发web控件时,非常灵活和功能强大,可以采用客户端脚本如js,可以对控件进行封装,使之有自己的属性、方法和事件等。利用htc封装的listview控件中对外有两个属性CfgXMLSrc(配置文件,设置listview的每一种显示模式对应的xsl文件路径等信息)和View(listview的显示模式),在htc中根据listview的View属性来选择不同的xsl文件和xml数据文件生成html,并输出。 这样就可以通过改变listview控件的view属性来切换listview的不同显示效果。 在线演示 打包下载 以前写换皮肤的控件,都是通过更换css和图片路径来做的(可以看看http://www.stedy.com),局限性很大,例如toolbar,在winxp和win2000下差别很大,只靠通过换css和图片路径无法应付这种情况。通过开发listview的经验,从中悟到了一种更好的开发换皮肤的web控件的模式: 首先将控件的相关数据用xml描述出来,对于每一种Theme(皮肤/主题样式),有一个相关的配置文件,配置文件中记载了该控件所用到的xsl、css、图片路径、htc等信息。在控件相关的htc中,根据Theme属性组合这些。从而可以灵活的应付各种情况。 例如刚才说的toolbar,假如入我们有三种风格:winxp蓝色、winxp银色和windows经典,前面两种基本差不多,只是样式和图片不一样,而后面一种和前面的两种差别比较大。那么我们需要写两个xsl,三个css文件,三个图片文件夹,组合一下就可以生成这三种风格的toolbar了。 这种控件开发模式会慢慢流行起来并在asp.net控件中发挥重要作用的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值