日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Android Adapter之BaseAdapter

系統(tǒng) 2144 0



?1.概念

Adapter英文意思 適配器

?

Adapter是連接后端數(shù)據(jù)和前端顯示的適配器接口,是數(shù)據(jù)和UI(View)之間一個(gè)重要的紐帶。在常見的View(ListView,GridView)等地方都需要用到Adapter。如下圖直觀的表達(dá)了Data、Adapter、View三者的關(guān)系:


Android Adapter之BaseAdapter
?(盜圖可恥,但是很直觀)


Android Adapter之BaseAdapter
?

我們可以看到在Android中與Adapter有關(guān)的所有接口、類的完整層級圖。在我們使用過程中可以根據(jù)自己的需求實(shí)現(xiàn)接口或者繼承類進(jìn)行一定的擴(kuò)展。比較常用的有 BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。

  • BaseAdapter 是一個(gè)抽象類,繼承它需要實(shí)現(xiàn)較多的方法,所以也就具有較高的靈活性;
  • ArrayAdapter 支持泛型操作,通常需要實(shí)現(xiàn)getView方法,特殊情況下(結(jié)合數(shù)據(jù)row id),為了讓ui事件相應(yīng)處理方便點(diǎn)最好重寫getItemId;
  • SimpleCursorAdapter 可以適用于簡單的純文字型ListView,它需要Cursor的字段和UI的id對應(yīng)起來。如需要實(shí)現(xiàn)更復(fù)雜的UI也可以重寫其他方法。

?

?

BaseAdapter的所有接口:


Android Adapter之BaseAdapter
最常用的有 getView() ,它是將獲取數(shù)據(jù)后的View組件返回,如ListView中每一行里的TextView、Gallery中的每個(gè)ImageView。

getItemId() ,返回?cái)?shù)據(jù)的id

getItem() ,將獲取數(shù)據(jù)的某個(gè)位置的數(shù)據(jù)返回 如array[0],array[1].....

getCount() 將獲取數(shù)據(jù)的個(gè)數(shù)返回

?

BaseAdapter 是一個(gè) 抽象類 如果使用我們必須自己去實(shí)現(xiàn)

下邊引用一個(gè)例子:


Android Adapter之BaseAdapter
?我用了4個(gè)插件Spinner,ListView ,Gallery,GridView

?

?

      package com.example.fouradpater_2;

import android.os.Bundle;
import android.provider.MediaStore.Images;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

public class MainActivity extends Activity {
	//作為一個(gè)adapter用于轉(zhuǎn)換的“過渡”view
	private LayoutInflater mInflater;
	//定義一個(gè)數(shù)組用來存放數(shù)據(jù)
	private static final String[] mad = {"4","3","2","1"};
	//定義四個(gè)插件
	private Spinner mSpinner;
	
	private GridView mGridView;
	
	private Gallery mGallery;
	
	private ListView mListView;
	//定義一個(gè)adapter
	private Adapter mAdapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//		mInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//		mInflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		
		//關(guān)聯(lián)四個(gè)組件
		mSpinner = (Spinner) findViewById(R.id.spinner1);
		mGridView = (GridView) findViewById(R.id.gridView1);
		mGallery = (Gallery) findViewById(R.id.gallery1);
		mListView = (ListView) findViewById(R.id.listView1);
		//new一個(gè) Adapter 的 BaseAdapter
		mAdapter = new BaseAdapter() {
			
			@Override
			//最常用的有g(shù)etView(),它是將獲取數(shù)據(jù)后的View組件返回,
			//如ListView中每一行里的TextView、Gallery中的每個(gè)ImageView。
			public View getView(int position, View convertView, ViewGroup parent) {
				// TODO Auto-generated method stu

				TextView text;
				ImageView imgview;
				RelativeLayout rLayout;
				 if (convertView == null) {
					 rLayout = (RelativeLayout) mInflater.inflate(R.layout.new_file, parent, false);
//					 view = new TextView(MainActivity.this);
			        } else {
			        	rLayout = (RelativeLayout) convertView;
			        }
				String item = (String) getItem(position);
//				rLayout.setTag(item.toString());
				text = (TextView) rLayout.findViewById(R.id.TextView2);
//				text.setText(item.toString());   畫蛇添足
				text.setText(item);
				
				imgview = (ImageView) rLayout.findViewById(R.id.ImageView1);
//				imgview.setId(R.drawable.ic_launcher);// 用錯(cuò)函數(shù)
				
				imgview.setImageResource(R.drawable.ic_launcher);
				
				
				return rLayout;
			}
			
			@Override
			//getItemId(),返回?cái)?shù)據(jù)的id
			public long getItemId(int position) {
				return position;
			}
			
			@Override
			//getItem(),將獲取數(shù)據(jù)的某個(gè)位置的數(shù)據(jù)返回 如array[0],array[1].....
			public Object getItem(int position) {
				return  mad[mad.length-1-position];
			}
			
			@Override
			//getCount()將獲取數(shù)據(jù)的個(gè)數(shù)返回
			public int getCount() {
				
				return mad.length;
			}
		};

	
		mSpinner.setAdapter((SpinnerAdapter) mAdapter);
		mGridView.setAdapter((ListAdapter) mAdapter);
		mGallery.setAdapter((SpinnerAdapter) mAdapter);
		mListView.setAdapter((ListAdapter) mAdapter);
	}
		
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

    

?

記錄下自己的錯(cuò)誤,順便做下記錄和介紹

使用BaseAdapter ,必須將最基礎(chǔ)的4個(gè)函數(shù)完善

      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <ImageView
        android:id="@+id/ImageView1"
        android:layout_width="20dp"
        android:layout_height="20dp"
        
        />
    <TextView 
        android:id="@+id/TextView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/ImageView1"
        
        />
</RelativeLayout>
    

?這是BaseAdapter需要用到的xml,算是一個(gè)“過渡”的xml,用來給getView傳遞View

?

?

所以BaseAdapter比較萬能,可以將各種儲存結(jié)構(gòu)通過Adapter 傳遞給需要的View

Android Adapter之BaseAdapter


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 迁西县| 合阳县| 衡南县| 万山特区| 上高县| 哈密市| 工布江达县| 三河市| 横山县| 滦南县| 临高县| 南陵县| 大厂| 香格里拉县| 牟定县| 郑州市| 苏尼特右旗| 阿图什市| 铜鼓县| 密云县| 莒南县| 松阳县| 修武县| 峨眉山市| 吴忠市| 东乌珠穆沁旗| 湟源县| 常熟市| 宁波市| 榆林市| 三穗县| 白河县| 冷水江市| 舞钢市| 胶南市| 武强县| 石渠县| 桓台县| 甘谷县| 澳门| 舟曲县|