objects)上面的這行代碼來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器來做兩者的適配工作,ArrayAd" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

android之ArrayAdapter的重寫

系統 1813 0

昨天介紹了ArrayAdapter的使用,今天介紹一下更加實用的一點,對它進行重寫,滿足自己的個性化設計需要.

ArrayAdapter(數組適配器)一般用于顯示一行文本信息,所以比較容易。

    public ArrayAdapter(Context context,int textViewResourceId, List<T> objects)
  

上面的這行代碼來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器來做兩者的適配工作,ArrayAdapter的構造需要三個參數,依次為this,布局文件(注意這里的布局文件描述的是列表的每一行的布局),數據源(一個List集合)。同時用setAdapter()將ListView和Adapter綁定。

例子一:可以用來簡單的顯示一條文字

    package jason.demo14;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Demo13Activity extends Activity {
    private ListView lv;
    private ArrayList<String> list = new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv = (ListView)findViewById(R.id.listview);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_expandable_list_item_1,
                getData());
        lv.setAdapter(adapter);
    }
    
    private ArrayList<String> getData()
    {
        list.add("180平米的房子");
        list.add("一個勤勞漂亮的老婆");
        list.add("一輛寶馬");
        list.add("一個強壯且永不生病的身體");
        list.add("一個喜歡的事業");
        return list;
    }
}

    
    
  

注意:這里的android.R.layout.simple_expandable_list_item_1是系統內置布局,樣式就是如下

android之ArrayAdapter的重寫

    
      例子二:這個例子可以增加一個ImageView,但是在設置ArrayAdapter的時候需要增加這個自定義的布局
    
  
    public ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

  

上面的第一個參數是上下文,一般為this。第二個參數是自定義的布局文件,比如下面的就是R.layout.list_item。第三個參數是布局中用來顯示文字的TextView的id,第四個參數是數據集合,跟例一一樣

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <ImageView 
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        />
    <TextView 
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>
  

Activity的java代碼:

    package jason.demo14;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Demo13Activity extends Activity {
    private ListView lv;
    private ArrayList<String> list = new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv = (ListView)findViewById(R.id.listview);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                R.layout.list_item,//區別就在這一行和下一行,這里是自己定義的布局文件,
                R.id.tv,//這是R.layout.list_item中TextView的ID,用來確定把添加進來的數據顯示在哪個位置
                getData());
        lv.setAdapter(adapter);
    }
    
    private ArrayList<String> getData()
    {
        list.add("180平米的房子");
        list.add("一個勤勞漂亮的老婆");
        list.add("一輛寶馬");
        list.add("一個強壯且永不生病的身體");
        list.add("一個喜歡的事業");
        return list;
    }
}
  

效果如下:

android之ArrayAdapter的重寫

例子3:實現更復雜的效果:

這就需要重寫getView方法了,

1. 自定義列表樣式

image_item.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="horizontal"> 
<ImageView 
    android:id="@+id/item_thumbnail" 
    android:layout_height="48dip" 
    android:layout_width="48dip" 
        /> 
<TextView 
    android:id="@+id/item_file_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:paddingLeft="5dip" 
    />
</LinearLayout>
  


2. 自定義ArrayAdapter

    public class ImageListAdapter extends ArrayAdapter<File>{ 
    private int resource; 
    public ImageListAdapter(Context context, int resourceId, List<File> objects) { 
        super(context, resourceId, objects); 
        // 記錄下來稍后使用 
        resource = resourceId; 
    }

    public View getView(int position, View convertView, ViewGroup parent) { 
        LinearLayout imageListView; 
        // 獲取數據 
        File file = getItem(position); 
        String fileName = file.getName(); 
        Bitmap bitmap = getBitmapFromFile(file);

        // 系統顯示列表時,首先實例化一個適配器(這里將實例化自定義的適配器)。 
        // 當手動完成適配時,必須手動映射數據,這需要重寫getView()方法。 
        // 系統在繪制列表的每一行的時候將調用此方法。 
        // getView()有三個參數, 
        // position表示將顯示的是第幾行, 
        // covertView是從布局文件中inflate來的布局。 
        // 我們用LayoutInflater的方法將定義好的image_item.xml文件提取成View實例用來顯示。 
        // 然后將xml文件中的各個組件實例化(簡單的findViewById()方法)。 
        // 這樣便可以將數據對應到各個組件上了。 
        // 
        if(convertView == null) { 
            imageListView = new LinearLayout(getContext()); 
            LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
            inflater.inflate(resource, imageListView, true);//把image_item.xml布局解析到LinearLayout里面 
        } else { 
            imageListView = (LinearLayout)convertView; 
        }

        // 獲取控件,填充數據 
        ImageView imageView = (ImageView) imageListView.findViewById(R.id.item_thumbnail); 
        TextView textView = (TextView) imageListView.findViewById(R.id.item_file_name); 
        textView.setText(fileName); 
        imageView.setImageBitmap(bitmap);

        return imageListView; 
    }

    // 從文件獲取Bitmap用于填充 
    private Bitmap getBitmapFromFile(File file) { 
        Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 
        return  bitmap; 
    } 
}

  


3. 綁定數據

    private void bindFilesToList(File[] files) { 
        List<File> fileList = new ArrayList<File>(); 
        for(File file : files) { 
            fileList.add(file); 
        }

        ImageListAdapter adapter = new ImageListAdapter(ImageFilesListActivity.this, 
                                                        R.layout.image_item, 
                                                        fileList); 
        setListAdapter(adapter); 
}
  

基本就是這樣了

android之ArrayAdapter的重寫

android之ArrayAdapter的重寫


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本不卡在线 | 国产亚洲人成a在线v网站 | 欧美日日日 | 狠狠色丁香久久综合五月 | 亚洲精品短视频 | 亚洲精品一区二区三区国产 | 国产精品美女一区二区 | 久久激情免费视频 | 亚洲精品一区二区不卡 | 亚洲图片综合网 | 另类久久| 亚洲精彩视频 | 亚州色吧 | 97成人精品视频在线播放 | 婷婷色九月综合激情丁香 | 中文字幕日韩精品中文区 | 九九视频热 | 天天舔天天射天天干 | 久久精品日日躁夜夜躁欧美 | 99久久国产免费福利 | 精品玖玖玖视频在线观看 | 日本色午夜 | 奇米影视第四色在线观看 | 亚洲综合伦理一区 | 一级毛片aaa片免费观看 | 欧美亚洲国产一区 | 中文字幕亚洲日韩无线码 | 精品伊人久久 | 四虎永久免费地址在线观看 | 亚洲一区二区三区免费观看 | 欧美大片天天免费看视频 | 欧美亚洲综合在线 | 一级a毛片免费观看久久精品 | 91视频国产精品 | 涩涩视频网 | 欧美不卡影院 | 九九在线偷拍视频在线播放 | 在线观看视频99 | 国产精品成人四虎免费视频 | 欧美成人a视频 | 亚洲综合色网站 |