ListView

ListView:垂直列表顯示內(nèi)容

  1. ListView的作用
    ListView只有一項工作但两,那就是展示數(shù)據(jù)扎即。它并不關系數(shù)據(jù)從哪而來吞获,數(shù)據(jù)到底是什么類型等等况凉,它只負責展示數(shù)據(jù)。但是衫哥,它要是沒數(shù)據(jù)的話也談不上展示了茎刚。所以它有一個好基友,那就是Adapter撤逢。ListView需要訪問什么數(shù)據(jù)膛锭,都是吩咐Adapter幫忙去訪問數(shù)據(jù)的。兩朋友形成了一種良好的工作模式蚊荣,Adapter只負責提供數(shù)據(jù)初狰,ListView只負責展示數(shù)據(jù)。所以要了解ListView那顆浪蕩不羈的心互例,我們也需要了解Adapter奢入,這樣才能更好地把控ListView的洪荒之力。
  2. Adapter的作用
    Adapter做的工作媳叨,就是幫ListView去適配數(shù)據(jù)源的腥光,這樣ListView就不用煩惱數(shù)據(jù)的問題了,它就可以專心做好展示的工作糊秆。Adapter本身是一個接口武福,所以它能實現(xiàn)各種各樣的子類,子類就通過自己特定的邏輯去完成特定的功能痘番,去適配特定的數(shù)據(jù)捉片。例如,ArrayAdapter可以用于數(shù)組和List類型的數(shù)據(jù)源適配等等汞舱。
    同時伍纫,我們繼承Adapter的時候,有一個灰常重要的方法需要我們重寫昂芜,那就是public View getView()方法莹规。
  3. 使用

1.創(chuàng)建ListView:.xml .代碼

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
    </ListView>

2.初始化數(shù)據(jù)

super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView=findViewById(R.id.lv);

        //初始化數(shù)據(jù)
        initDate();

        //設置行與行之間的間距
        listView.setDividerHeight(20);
}
 //準備數(shù)據(jù)源
    public void initDate(){
        friendModels=new ArrayList<>();
        //創(chuàng)建一個好友

        FriendModel model=new FriendModel(R.drawable.ic_launcher_foreground,"jack");
        //添加到數(shù)組
        friendModels.add(model);
    }
}
/**
 * ImageView:用于顯示圖片的額控件
 * Bitmap:具體的某一張圖片數(shù)據(jù)
 * R.drawable.bg:只是圖片對應的id
 */
public class FriendModel {
    public int icon;
    public String name;

    public FriendModel(int icon, String name) {
        this.icon = icon;
        this.name = name;
    }
}

3.配置數(shù)據(jù):創(chuàng)建一個類繼承BaseAdapter

//定義數(shù)據(jù)適配器
    public class MyAdapter extends BaseAdapter{

        //配置ListView有多少行
        @Override
        public int getCount() {
            return friendModels.size();
        }

        //獲取數(shù)據(jù)源(數(shù)組:所有的數(shù)據(jù),如所有的好友的信息)里面position行對應的數(shù)據(jù)
        @Override
        public Object getItem(int position) {
            return null;
        }

        //獲取position位置對應的id
        //id就是這一行對應的索引值
        @Override
        public long getItemId(int position) {
            return position;
        }

        //配置每行顯示什么內(nèi)容
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            /*
            //創(chuàng)建文本視圖
            TextView textView=new TextView(getApplicationContext());
            textView.setText("row"+position);
            textView.layout(0,0,300,100);
            */

            //將一個layout.xml文件轉(zhuǎn)化為對應的視圖
            View view=View.inflate(getApplicationContext(),R.layout.layout_qq,null);

            return view;
        }
    }

4.設置ListView的適配器(數(shù)據(jù))

//設置適配器
        listView.setAdapter(new MyAdapter());

5.創(chuàng)建layout布局每一行放入具體樣式
使用View.Inflate 解析layout布局文件->View

    <View
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@color/colorPrimaryDark"
        android:tag="vTag"
        />

6.響應用戶的點擊事件setOnItemClickListener - onItemClick

//設置監(jiān)聽器監(jiān)聽用戶的行為
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //先將Item對應的視圖轉(zhuǎn)化為ViewGroup
                ViewGroup viewGroup=(ViewGroup)view;
                //查找容器里的子視圖
                View v=viewGroup.findViewWithTag("vTag");
                //操作這個視圖
                v.setBackgroundColor(Color.BLACK);
                //切換到下一個界面
                //調(diào)用系統(tǒng)的或者某個應用的方式:隱式意圖
                //Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //顯示意圖:直接指明跳轉(zhuǎn)到那個界面
                Intent intent=new Intent(getApplicationContext(),SencondActivity.class);
                //開始切換
                startActivity(intent);
//新建跳轉(zhuǎn)的界面
public class SencondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sencond);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        finish();//關閉當前的界面
        return true;
    }
}
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".SencondActivity"
    tools:showIn="@layout/activity_sencond">

</androidx.constraintlayout.widget.ConstraintLayout>

注意:每行顯示的內(nèi)容通常是用layout.xml配置文件

  1. 效果展示


    首界面

    點擊后跳轉(zhuǎn)界面

    再次點擊返回泌神,背景顏色變黑
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末良漱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腻扇,更是在濱河造成了極大的恐慌债热,老刑警劉巖砾嫉,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幼苛,死亡現(xiàn)場離奇詭異,居然都是意外死亡焕刮,警方通過查閱死者的電腦和手機舶沿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門墙杯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人括荡,你說我怎么就攤上這事高镐。” “怎么了畸冲?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵嫉髓,是天一觀的道長。 經(jīng)常有香客問我邑闲,道長算行,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任苫耸,我火速辦了婚禮州邢,結果婚禮上,老公的妹妹穿的比我還像新娘褪子。我一直安慰自己量淌,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布嫌褪。 她就那樣靜靜地躺著呀枢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渔扎。 梳的紋絲不亂的頭發(fā)上硫狞,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音晃痴,去河邊找鬼残吩。 笑死,一個胖子當著我的面吹牛倘核,可吹牛的內(nèi)容都是我干的泣侮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼紧唱,長吁一口氣:“原來是場噩夢啊……” “哼活尊!你這毒婦竟也來了?” 一聲冷哼從身側響起漏益,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蛹锰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绰疤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铜犬,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了癣猾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敛劝。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纷宇,靈堂內(nèi)的尸體忽然破棺而出夸盟,到底是詐尸還是另有隱情,我是刑警寧澤像捶,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布上陕,位于F島的核電站,受9級特大地震影響拓春,放射性物質(zhì)發(fā)生泄漏唆垃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一痘儡、第九天 我趴在偏房一處隱蔽的房頂上張望辕万。 院中可真熱鬧,春花似錦沉删、人聲如沸渐尿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砖茸。三九已至,卻和暖如春殴穴,著一層夾襖步出監(jiān)牢的瞬間凉夯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工采幌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劲够,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓休傍,卻偏偏與公主長得像征绎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子磨取,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容