編輯:關於Android編程
之前一直想總結一下這樣知識,後面各種忙,就不想寫。還是自已總結一下比較好。listview需要注意事項有很多吧,也是最常用的控件之一。我們可以自動計算listview的高度,當與滾動條一起使用的時候。listview分隔線也可以去掉,或者更改。還有與各種控件一起使用的監聽。接下來看看我所介紹的以及效果圖。
一、看項目主要類
package com.example.customlistviewdemo;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;
public class CustomListviewActivity extends Activity implements
OnClickListener, OnItemLongClickListener {
private ListView myListView;
private MyCustomListViewAdapter mCustomListViewAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_listview);
myListView = (ListView) findViewById(R.id.listView1);
mCustomListViewAdapter = new MyCustomListViewAdapter(
getApplicationContext());
myListView.setOnItemLongClickListener(this); // 長按item監聽
myListView.setAdapter(mCustomListViewAdapter);
setListViewHeightBasedOnChildren(myListView); // listview自動計算高度
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(this);
}
// listview自動計算高度
private void setListViewHeightBasedOnChildren(ListView listView) {
// 獲取ListView對應的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 計算子項View 的寬高
totalHeight += listItem.getMeasuredHeight(); // 統計所有子項的總高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
public List getDataSource() {
ArrayList list = new ArrayList();
list.add(北京);
list.add(上海);
list.add(廣州);
list.add(南京);
list.add(蘇州);
list.add(江蘇);
list.add(杭州);
list.add(烏鎮);
list.add(麗江);
list.add(大理);
list.add(昆明);
list.add(哈爾濱);
return list;
}
public class MyCustomListViewAdapter extends BaseAdapter implements
OnCheckedChangeListener, OnClickListener {
private Context mContext;
private LayoutInflater mLayoutInflater;
public MyCustomListViewAdapter(Context context) {
mContext = context;
mLayoutInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return getDataSource().size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
LinearLayout linearLayout = (LinearLayout) mLayoutInflater.inflate(
R.layout.layout_custom_checkbox_item, null);
linearLayout.setOnClickListener(this);
linearLayout.setTag(position);
TextView titleTextView = (TextView) linearLayout
.findViewById(R.id.textView1);
if (titleTextView != null)
titleTextView.setText(getDataSource().get(position));
// 控件 是否選中
CheckBox selectedCheckBox = (CheckBox) linearLayout
.findViewById(R.id.checkBox1);
selectedCheckBox.setOnCheckedChangeListener(this);
return linearLayout;
}
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
Integer nPosition = (Integer) (arg0.getTag());
Toast.makeText(getApplication(), CheckBox選中事件:,
Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View arg0) {
// 單擊事件響應
int position = ((Integer) arg0.getTag()).intValue();
Toast.makeText(getApplication(),
listview單擊事件: + getDataSource().get(position),
Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(getApplicationContext(), listview長按事件:,
Toast.LENGTH_SHORT).show();
return true;
}
@Override
public void onClick(View arg0) {
if (arg0.getId() == R.id.button1) {
Toast.makeText(getApplicationContext(), button事件:,
Toast.LENGTH_SHORT).show();
}
}
}
大家都知道,listview是可以自已滾動的,但也可以禁止滾動。可能你不需要它滾動。只需要滾動條滾動。我就是遇到過這種需求,listview與滾動條一起使用情況。代碼上也有所說明了。
二、下面看看xml
這裡的xml還用到浮動的FrameLayout,用來顯示button鍵。
三、下面來看看listview的item的xml
android:longClickable=true android:clickable=true

五、最後補充一下,去掉listview分隔線或者設置。
去掉分隔線有三種方法:
1、myListView.setDividerHeight(0);
2、myListView.setDivider(null);
設置或者換一個好看的自動的分隔線也行
android:divider=@drawable/skin_line
到這裡就結束了,本文中講的都是監聽以及布局,關於listview以及滾動條,checkbox,buuton一起使用。
Android的Activity跳轉動畫各種效果整理
大家使用Android的原生UI都知道,Android的Activity跳轉就是很生硬的切換界面。其實Android的Activity跳轉可以設置各種動畫。下面給大家看看
Android進程間通信(IPC)機制Binder簡要介紹
在Android系統中,每一個應用程序都是由一些Activity和Service組成
Android點擊Button實現功能的幾種方法總結
Android中Button控件應該算作是比較簡單的控件,然而,它的使用頻率卻是非常的高,今天,我在這裡總結了三種常用的點擊Button實現其功能的方法。1.很多時候,我
6.4、Android Studio的GPU Monitor
Android Monitor包含GPU Monitor,它將可視化的顯示渲染窗體的時間。GPU Monitor可以幫助你:1、 迅速查看UI窗體生成2、 辨別是否渲染管