android ListView_新聞案例,androidlistview

來源:互聯網
上載者:User

android ListView_新聞案例,androidlistview

xml設計

<?xml version="1.0"?>-<RelativeLayout tools:context=".MainActivity" android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"><ListView android:id="@+id/lv_news" android:layout_height="fill_parent" android:layout_width="fill_parent"/></RelativeLayout>View Code<?xml version="1.0"?>-<RelativeLayout tools:context=".MainActivity" android:paddingTop="@dimen/activity_vertical_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"><ListView android:id="@+id/lv_news" android:layout_height="fill_parent" android:layout_width="fill_parent"/></RelativeLayout>ListView返回的xml設計

 

java

Activity

 

package com.itheima.news_listview.utils;import java.util.ArrayList;import android.content.Context;import com.itheima.news_listview.R;import com.itheima.news_listview.bean.NewsBean;public class NewsUtils { //封裝新聞的假資料到list中返回 public static ArrayList<NewsBean> getAllNews(Context context) { ArrayList<NewsBean> arrayList = new ArrayList<NewsBean>(); for(int i = 0 ;i <100;i++) { NewsBean newsBean = new NewsBean(); newsBean.title ="謝霆鋒經紀人:偷拍系侵權行為:"; newsBean.des= "稱謝霆鋒隱私權收到侵犯,將保留追究法律責任"; newsBean.news_url= "http://www.sina.cn"; newsBean.icon = context.getResources().getDrawable(R.drawable.ic_launcher);//通過context對象將一個資源id轉換成一個Drawable對象。 arrayList.add(newsBean); NewsBean newsBean1 = new NewsBean(); newsBean1.title ="知情人:王菲是謝霆鋒心頭最愛的人"; newsBean1.des= "身邊的人都知道謝霆鋒最愛王菲,二人早有複合跡象"; newsBean1.news_url= "http://www.baidu.cn"; newsBean1.icon = context.getResources().getDrawable(R.drawable.icon);//通過context對象將一個資源id轉換成一個Drawable對象。 arrayList.add(newsBean1); NewsBean newsBean2 = new NewsBean(); newsBean2.title ="熱烈祝賀黑馬74高薪就業"; newsBean2.des= "74期平均薪資20000,其中有一個哥們超過10萬,這些It精英都迎娶了白富美."; newsBean2.news_url= "http://www.itheima.com"; newsBean2.icon = context.getResources().getDrawable(R.drawable.icon2);//通過context對象將一個資源id轉換成一個Drawable對象。 arrayList.add(newsBean2); } return arrayList; }}utls

 

package com.itheima.news_listview.bean;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;public class NewsBean { public String title; public String des; public Drawable icon; public String news_url; }bean

 

package com.itheima.news_listview.adapter;import java.util.ArrayList;import com.itheima.news_listview.R;import com.itheima.news_listview.bean.NewsBean;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.webkit.WebView.FindListener;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;public class NewsAdapter extends BaseAdapter { private ArrayList<NewsBean> list; private Context context; //通過構造方法接受要顯示的新聞資料集合 public NewsAdapter(Context context,ArrayList<NewsBean> list){ this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; //1.複用converView最佳化listview,建立一個view作為getview的傳回值用來顯示一個條目 if(convertView != null){ view = convertView; }else { //context:上下文, resource:要轉換成view對象的layout的id, root:將layout用root(ViewGroup)包一層作為codify的傳回值,一般傳null// view = View.inflate(context, R.layout.item_news_layout, null);//將一個布局檔案轉換成一個view對象 //通過LayoutInflater將布局轉換成view對象// view = LayoutInflater.from(context).inflate(R.layout.item_news_layout, null); //通過context擷取系統服務得到一個LayoutInflater,通過LayoutInflater將一個布局轉換為view對象 LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = layoutInflater.inflate(R.layout.item_news_layout, null); } //2.擷取view上的子控制項對象 ImageView item_img_icon = (ImageView) view.findViewById(R.id.item_img_icon); TextView item_tv_des = (TextView) view.findViewById(R.id.item_tv_des); TextView item_tv_title = (TextView) view.findViewById(R.id.item_tv_title); //3.擷取postion位置條目對應的list集合中的新聞資料,Bean對象 NewsBean newsBean = list.get(position); //4.將資料設定給這些子控制項做顯示 item_img_icon.setImageDrawable(newsBean.icon);//設定imageView的圖片 item_tv_title.setText(newsBean.title); item_tv_des.setText(newsBean.des); return view; }}Adapter

 

 

老師筆記

複雜listview介面顯示 ,黑馬新聞(***********重要***********)

    1.布局寫listview

    2.找到listview

    3.擷取新聞資料封裝到list集合中(才用類比資料),作為adapter的顯示資料,怎麼將擷取的新聞資料給adapter???

    4.建立一個adapter繼承BaseAdapter,實現4個方法
        getcount: 有多少條新聞資料,就有多少個條目。
        getView:將返回一個複雜的布局作為條目的內容展示;並且顯示的資料是新聞的資訊。 ?????
        
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        //1.複用converView最佳化listview,建立一個view作為getview的傳回值用來顯示一個條目
        if(convertView != null){
            view = convertView;
        }else {
            //context:上下文, resource:要轉換成view對象的layout的id, root:將layout用root(ViewGroup)包一層作為getview的傳回值,一般傳null
            view = View.inflate(context, R.layout.item_news_layout, null);//將一個布局檔案轉換成一個view對象
        }
        //2.擷取view上的子控制項對象
        ImageView item_img_icon = (ImageView) view.findViewById(R.id.item_img_icon);
        TextView item_tv_des = (TextView) view.findViewById(R.id.item_tv_des);
        TextView item_tv_title = (TextView) view.findViewById(R.id.item_tv_title);
        //3.擷取postion位置條目對應的list集合中的新聞資料,Bean對象
        NewsBean newsBean = list.get(position);
        //4.將資料設定給這些子控制項做顯示
        item_img_icon.setImageDrawable(newsBean.icon);//設定imageView的圖片
        item_tv_title.setText(newsBean.title);
        item_tv_des.setText(newsBean.des);
        
        return view;
    }
        
    5.建立一個adapter對象設定給listview

    6.設定listview的條目的點擊事件,並封裝點擊事件,去查看新聞詳情。 ?????????
        //設定listview條目的點擊事件
        lv_news.setOnItemClickListener(this);
    
            //listview的條目點擊時會調用該方法 parent:代表listviw  view:點擊的條目上的那個view對象   position:條目的位置  id: 條目的id

    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        
        //需要擷取條目上bean對象中url做跳轉
        NewsBean bean = (NewsBean) parent.getItemAtPosition(position);
        
        String url = bean.news_url;
        
        //跳轉瀏覽器
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(url));
        startActivity(intent);
    }

        

    1.布局寫listview ok

    2.找到listview ok
    
    3.封裝新聞資料到list集合中 ,目的是為adapter提供資料展示。 ok

    4.封裝一個Adapter類繼承BaseAdatper,寫一個構造方法接受list集合資料,複寫四個方法
        a.建立一個構造方法  ok
        b.封裝getCount方法   ok
        c.getView方法:   不ok
            1.複用convertview,模板代碼,如果不都能空,需要將一個布局檔案轉換為view對象作為getview的返回對象。
                view = View.inflater(Context context, int resuorceId,ViewGroup root)
            2.找到view上的這些子控制項,目的是將list集合中的bean資料一一對應設定給這些子控制項

            3.從list集合中擷取postion條目上要顯示的資料Bean
            
            4.將擷取的bean中的資料設定給這些子控制項
        d.getItem方法:將list集合中指定postion上的bean對象返回
        e.getItemId,直接返回postion

    5.建立一個封裝的Adapter對象,設定給listview   ok
    6.設定listview條目的點擊事件  ok
        listview.setOnItem....

    7.複寫OnItemClicklistener方法,擷取相應條目上的bean對象,最終擷取到url,做Intent跳轉;  不ok


#10 常用擷取inflate的寫法

            1.
            //context:上下文, resource:要轉換成view對象的layout的id, root:將layout用root(ViewGroup)包一層作為codify的傳回值,一般傳null
                //view = View.inflate(context, R.layout.item_news_layout, null);//將一個布局檔案轉換成一個view對象

            2.
            //通過LayoutInflater將布局轉換成view對象
            //view =  LayoutInflater.from(context).inflate(R.layout.item_news_layout, null);
            
            3.
            //通過context擷取系統服務得到一個LayoutInflater,通過LayoutInflater將一個布局轉換為view對象
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.item_news_layout, null);
   

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.