實現(xiàn)思路: 1.首先要準備并拷入Xlistview的源代碼或者jar包,新建一個項目XlistviewDemo對Xlistview的源代碼形成依賴。 2.準備Xlistview的主布局文件Xlistview_layout.xml中添加Xlistview控件。 3.準備Xlistview的Item布局文件Xlistview_item.xml,里面兩個控件,一個放數據,一個放點擊可顯示的單選圖標。 4.新建一個adapter包和MyBaseAdapter繼承BaseAdapter。(并優(yōu)化) 5.在主activity中聲明并注冊Xlistview,初始化數據源和適配器,并設置給Xlistview實現(xiàn)代碼。(至此已實現(xiàn)listview)。最后讓Mainactivity實現(xiàn)IXListViewListener接口,重寫兩個方法實現(xiàn)上拉刷新和下拉加載功能。
1.首先要準備并拷入Xlistview的源代碼或者jar包,新建一個項目XlistviewDemo對Xlistview的源代碼形成依賴。
拷入源代碼形成依賴的方法待完善
2.準備Xlistview的主布局文件Xlistview_layout.xml中添加Xlistview控件。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ll"android:layout_width="match_parent" android:layout_height="match_parent"tools:context="com.soft.qianyu.sw在外圍用LinearLayout包裹Xlistview(注意布局和Xlistview都要設置id)。3.準備Xlistview的Item布局文件Xlistview_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="match_parent"><TextView android:id="@+id/text" android:layout_width="0dp" android:layout_weight="9" android:layout_height="wrap_content" android:textSize="35sp" android:gravity="center" /> <TextView android:id="@+id/select_tv" android:visibility="invisible" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="√" android:textColor="@color/colorAccent" android:gravity="center" android:textSize="35sp" /></LinearLayout>兩個TextView一個放置數據,另外一個點擊會改變visitible屬性。
4.新建一個adapter包和MyBaseAdapter繼承BaseAdapter。(并優(yōu)化)
public class MyBaseAdapter extends BaseAdapter { //一個BaseAdapter需要數據源和打氣筒,所以先聲明兩個變量 ArrayList<String> datas; LayoutInflater inflater; //為了能定位到點擊的位置,所以先聲明一個選中項的位置常量 public int selectedPosition = 0 ; //提供BaseAdapter適配器的構造器 public MyBaseAdapter(ArrayList<String> datas, Context context){ this.datas = datas; //inflater對象是從上下文中來獲取來的 inflater = LayoutInflater.from(context); } //獲得數據源的總數 @Override public int getCount() { return datas==null?0:datas.size(); } //獲得指定位置的數據源 @Override public Object getItem(int position) { //如果數據源為空,返回為空 return datas==null?null:datas.get(position); } //獲得指定位置的item的下標 @Override public long getItemId(int position) { return position; } //加載item布局并展示數據 @Override public View getView(int position, View convertView, ViewGroup viewGroup) { //為實現(xiàn)單布局加載和緩存控件,先要聲明者兩個變量 View view; ViewHolder holder;//實現(xiàn)單布局加載if (convertView==null){view=inflater.inflate(R.layout.xlistview_item,null);//實現(xiàn)緩存控件holder = new ViewHolder();holder.text = (TextView) view.findViewById(R.id.text);holder.select_tv = (TextView) view.findViewById(R.id.select_tv); //將holder與view綁定緩存 view.setTag(holder); }else { //直接顯示控件 view = convertView ; holder = (ViewHolder) view.getTag(); } //獲得指定位置的數據,若定位的是所選控件,則改變它的visible屬性。 String data = datas.get(position); if(selectedPosition== position) { holder.select_tv.setVisibility(View.VISIBLE); }else { holder.select_tv.setVisibility(View.INVISIBLE); } //將數據展示出來 holder.text.setText(data); return view; } //緩存控件的ViewHolder類 class ViewHolder{ TextView text ; TextView select_tv; }}5.在MainActivity中聲明并注冊Xlistview,初始化數據源和適配器,并設置給Xlistview實現(xiàn)代碼。(至此將實現(xiàn)listview基本效果)
//implements XListView.IXListViewListener的意思是將會提供刷新和加載這兩個方法讓你進行重寫,你只要在里面放入你要處理的數據就可以了。public class MainActivity extends Activity implements XListView.IXListViewListener {//首先聲明各個變量,包括Xlistview控件,數據源datas,適配器adapter等//flag表示你每次刷新的時候的標記。 ArrayList<String> datas; MyBaseAdapter adapter; XListView xListView; boolean flag = false; @Override PRotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化方法 init(); }//進行初始化 private void init() { //初始化xlistview xListView = (XListView) findViewById(R.id.xListView); //初始化數據源和數據 datas = new ArrayList<String>(); getData1(); //初始化適配器并為Xlistview綁定適配器 adapter = new MyBaseAdapter(datas,MainActivity.this); xListView.setAdapter(adapter);//以上方法即可實現(xiàn)簡單類似listview的展示效果,以下就是上拉刷新下拉加載的代碼部分 //為xlistview設置監(jiān)聽事件,重寫刷新加載的兩個方法 xListView.setXListViewListener(this); //設置xlistview允許上拉加載更多 xListView.setPullLoadEnable(true); //設置xlistview的item點擊事件,顯示單選功能 xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {//點擊item的時候講adapter的selectedPosition的值設定為當前點擊的item位置(因為xlistview有個默認的標題欄占據了一個位置,所以要減1)adapter.selectedPosition = position-1 ;//只要是adapter里面的數據發(fā)生了變化就必須要調用notifyDataSetChanged通知改變 adapter.notifyDataSetChanged(); } }); }//初始化的數據 private void getData1() { datas.add("趙云"); datas.add("關羽"); datas.add("劉備"); datas.add("曹操"); datas.add("貂蟬"); datas.add("呂布"); datas.add("李師師"); } //刷新的數據 private void getData2() { datas.add("常勝將軍"); datas.add("漢壽亭候"); datas.add("仁君"); datas.add("奸雄"); datas.add("三國新聞熱點
疑難解答