android完成自定義Listview item

導(dǎo)言:

很多人都喜歡使用安卓的listview進(jìn)行列表式的展示贮配,然而列表項(xiàng)的內(nèi)容往往不是一個(gè)單一的textview,可能是很多復(fù)雜的組件組合塞赂,該篇旨在幫助大家了解泪勒,如何制作自定義的listview item 并且實(shí)現(xiàn)item中組件的監(jiān)聽(tīng)和值傳遞。

樣例:

我們這次主要實(shí)現(xiàn)了一個(gè)類(lèi)似于酒店預(yù)訂展示的界面宴猾,采用listview布局酣藻,每個(gè)item由圖片、按鈕鳍置、各條文字組成


首先我們需要兩個(gè)layout

1.activity_order_results.xml 存放列表展示的底板

2.activity_order_results_item.xml 定義列表項(xiàng)組件的底板

接著我們需要編寫(xiě)一個(gè)OrderResultsActivity.java 的activity來(lái)控制第一個(gè)layout文件

最后需要編寫(xiě)一個(gè)OrderResultsAdapter.java 來(lái)定義每個(gè)列表項(xiàng)組件的adapter


代碼:

1.activity_room_results.xml ?放置了一個(gè)ListView組件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="match_parent"

android:layout_height="match_parent">

<ListView

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/listView"

android:layout_gravity="center_horizontal"/>

</LinearLayout>


2.activity_order_results_item.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"android:layout_width="match_parent"

android:layout_height="wrap_content"

android:paddingBottom="10dp">


<ImageView

android:layout_width="135dp"

android:layout_height="115dp"

android:id="@+id/hotelPicture"

android:background="@mipmap/room_example"

android:layout_marginTop="8dp"

android:layout_marginLeft="8dp"/>


<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="vertical"

android:layout_marginLeft="5dp"

android:layout_marginTop="10dp">


<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:weightSum="1">


<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hotel Name"

android:textSize="17sp"

android:textStyle="bold"

android:textColor="@color/abc_input_method_navigation_guard"

android:layout_marginLeft="5dp"

android:id="@+id/hotelNameText"/>


<RatingBar

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:numStars="5"

style="?android:attr/ratingBarStyleSmall"

android:layout_marginLeft="10dp"

android:layout_gravity="center"

android:id="@+id/ratingBar"

android:stepSize="0.1"/>

</LinearLayout>


<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hotel Location la la la"

android:layout_marginTop="5dp"

android:layout_marginLeft="5dp"

android:id="@+id/hotelLocationText"

android:textSize="14sp"/>


<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal">


<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="512$"

android:layout_marginLeft="5dp"

android:layout_marginTop="5dp"

android:textSize="14sp"

android:editable="false"

android:textColor="@color/bright_foreground_disabled_material_light"

android:id="@+id/originPrice"/>


<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="487$"

android:layout_marginLeft="5dp"

android:layout_marginTop="5dp"

android:textSize="18sp"

android:editable="false"

android:textColor="@color/material_deep_teal_500"

android:textStyle="bold"

android:id="@+id/currentPrice"/>

</LinearLayout>


<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal">


<Button

android:layout_width="wrap_content"

android:layout_height="35dp"

android:text="Order Now"

android:textSize="10sp"

android:layout_marginTop="5dp"

android:layout_marginLeft="5dp"

android:background="@drawable/round_button_orange"

android:textColor="@color/abc_primary_text_disable_only_material_dark"

android:id="@+id/orderNowButton"/>


<Button

android:layout_width="wrap_content"

android:layout_height="35dp"

android:layout_marginLeft="10dp"

android:text="More Details"

android:textSize="10sp"

android:layout_marginTop="5dp"

android:background="@drawable/round_button_green"

android:textColor="@color/abc_primary_text_disable_only_material_dark"

android:id="@+id/decideButton"/>

</LinearLayout>

</LinearLayout>

</LinearLayout>


3. OrderResultsAdapter.java 自定義控制item組件的adapter

public classOrderResultsAdapterextendsBaseAdapter {

privateArrayListmData;

privateContextmContext;

publicOrderResultsAdapter(ArrayList mData,Context mContext){

this.mData=mData;

this.mContext=mContext;

}

@Override

public intgetCount() {

returnmData.size();

}

@Override

publicObject getItem(intposition) {

return null;

}

@Override

public longgetItemId(intposition) {

returnposition;

}

@Override

publicView getView(final intposition, View convertView, ViewGroup parent) {

if(convertView ==null){

convertView = LayoutInflater.from(mContext).inflate(R.layout.activity_order_results_item,parent,false);

}

//初始化item的各個(gè)組件

finalImageView imageView1=(ImageView)convertView.findViewById(R.id.hotelPicture);

finalTextView originPrice=(TextView)convertView.findViewById(R.id.originPrice);

originPrice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

originPrice.setText(mData.get(position).getOriginPrice()+"");

finalTextView currentPrice=(TextView)convertView.findViewById(R.id.currentPrice);

currentPrice.setText(mData.get(position).getCurrentPrice()+"");

finalTextView hotelName=(TextView) convertView.findViewById(R.id.hotelNameText);

hotelName.setText(mData.get(position).getName());

finalTextView hotelLocation=(TextView) convertView.findViewById(R.id.hotelLocationText);

hotelLocation.setText(mData.get(position).getLocation());

Button orderNowButton=(Button)convertView.findViewById(R.id.orderNowButton);

Button decideButton=(Button)convertView.findViewById(R.id.decideButton);

imageView1.setBackgroundResource(R.mipmap.timg1);

RatingBar ratingBar=(RatingBar)convertView.findViewById(R.id.ratingBar);

ratingBar.setRating((float)mData.get(position).getPoints());


//設(shè)置按鈕的監(jiān)聽(tīng)辽剧,實(shí)現(xiàn)點(diǎn)擊后跳轉(zhuǎn)到酒店詳細(xì)內(nèi)容的界面,并且傳遞數(shù)據(jù)

decideButton.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View v) {

//使用bundle和intent實(shí)現(xiàn)界面間數(shù)據(jù)傳遞

if(true){

Intent intent=newIntent(mContext,RoomResultsDetailActivity.class);

Bundle b =newBundle();

b.putString("hotelName",hotelName.getText().toString());

b.putString("originPrice",originPrice.getText().toString());

b.putString("currentPrice",currentPrice.getText().toString());

b.putString("hotelLocation",hotelLocation.getText().toString());

b.putString("nego",negoString);

intent.putExtras(b);

mContext.startActivity(intent);

}

}

});

returnconvertView;

}

}


4. OrderResultsActivity

public classOrderResultsActivity extends AppCompatActivityimplementsAdapterView.OnItemClickListener{

privateListViewmListView;

privateArrayListmList;

privateMediaPlayermp;

@Override

public voidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setToolBarTitle("Order Results");

mp=MediaPlayer.create(OrderResultsActivity.this,R.raw.hotel_reserve_result);

getSubTitle().setText("Tips");

getSubTitle().setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View v) {

mp.start();

}

});

mListView=(ListView)findViewById(R.id.listView);

Resources res=this.getResources();

mList=newArrayList();

//初始化data

ArrayList tags=newArrayList<>();

OrderResultsEntity orderResultsEntity1=newOrderResultsEntity(255,230,"0.19km away from the destination","Lingnanjiayuan Chain Hotel",3.42,tags);

OrderResultsEntity orderResultsEntity2=newOrderResultsEntity(250,235,"0.31km away from the destination","Jiaxin Hotel",3.76,tags);

OrderResultsEntity orderResultsEntity3=newOrderResultsEntity(180,160,"0.22km away from the destination","Jiayu Hotel",4.11,tags);

OrderResultsEntity orderResultsEntity4=newOrderResultsEntity(198,162,"0.28km away from the destination","Inn De Hotel",4.74,tags);

OrderResultsEntity orderResultsEntity5=newOrderResultsEntity(260,240,"0.38km away from the destination","Wong Kim Dinh Hotel",3.21,tags);

mList.add(orderResultsEntity4);

mList.add(orderResultsEntity3);

mList.add(orderResultsEntity2);

mList.add(orderResultsEntity1);

mList.add(orderResultsEntity5);

OrderResultsAdapter orderResultsAdapter=newOrderResultsAdapter(mList,OrderResultsActivity.this);

mListView.setAdapter(orderResultsAdapter);

}

@Override

protected intgetLayoutId() {

returnR.layout.activity_order_results;

}

@Override

public voidonItemClick(AdapterView parent, View view,intposition,longid){

Toast.makeText(OrderResultsActivity.this,"你點(diǎn)擊了第"+ position +"項(xiàng)",Toast.LENGTH_SHORT).show();

Intent intent=newIntent();

intent.setClass(OrderResultsActivity.this,RoomResultsDetailActivity.class);

startActivity(intent);

}

}

5.最后可以自己寫(xiě)一下訂單的實(shí)體税产,定義你所需要的實(shí)體屬性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怕轿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辟拷,更是在濱河造成了極大的恐慌撞羽,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衫冻,死亡現(xiàn)場(chǎng)離奇詭異诀紊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)隅俘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)邻奠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人为居,你說(shuō)我怎么就攤上這事碌宴。” “怎么了蒙畴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵贰镣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我膳凝,道長(zhǎng)碑隆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任蹬音,我火速辦了婚禮上煤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祟绊。我一直安慰自己楼入,他們只是感情好哥捕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著嘉熊,像睡著了一般遥赚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阐肤,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天凫佛,我揣著相機(jī)與錄音,去河邊找鬼孕惜。 笑死愧薛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衫画。 我是一名探鬼主播毫炉,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼削罩!你這毒婦竟也來(lái)了瞄勾?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弥激,失蹤者是張志新(化名)和其女友劉穎进陡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體微服,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趾疚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了以蕴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糙麦。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舒裤,靈堂內(nèi)的尸體忽然破棺而出喳资,到底是詐尸還是另有隱情,我是刑警寧澤腾供,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站鲜滩,受9級(jí)特大地震影響伴鳖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜徙硅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一榜聂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗓蘑,春花似錦须肆、人聲如沸匿乃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幢炸。三九已至,卻和暖如春拒贱,著一層夾襖步出監(jiān)牢的瞬間宛徊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工逻澳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闸天,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓斜做,卻偏偏與公主長(zhǎng)得像苞氮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓤逼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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