自定義列表視圖

通過繼承BaseAdapter寫一個子類,可以創建自定義列表視圖:

public class MyListAdapter extends BaseAdapter {

????private LayoutInflater mInflater;//聲明一個LayoutInflater類變量

????private Context mContext;//聲明一個Context類變量

????private List<Map<String,String>> mitem;//聲明一個元素為<Map<String,String>>類型的List對象,存儲testitem的值

????private Map<String,Integer> selectedtestItem = new HashMap<String,Integer>();//聲明一個Map對象,用HashMap來實現

????private List<Map<String, String>> mData; // 聲明一個元素為<Map<String,String>>類型的List對象,存儲的editTex

????private Map<String, String> editorValue = new HashMap<String, String>();//聲明一個Map對象,用HashMap來實現

????private List<Map<String,String>> mParameter;//用于保存parameter_edit參數值

????//private static HashMap<Integer, Boolean> isSelected;//聲明一個HashMap<Integer,Boolean>類型的變量

????private String[] testItems;

????private String promptForSpinner[] = {"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"};

????

????public MyListAdapter(Context context,String[] testItems) {//構造函數

????????// TODO Auto-generated constructor stub

????????mInflater = LayoutInflater.from(context);//獲得LayoutInflater

????????this.testItems = testItems;

????????puttestitemName();

????}

????private void puttestitemName()

????{

????????for (String str : promptForSpinner) {

????????????selectedtestItem.put(str,0);

????????}

????????/*for(int i=0;i<20;i++){

????????????selectedtestItem.put("list_item_Name", 0);//allValues保存以項目名稱為鍵值、0為數值的一系列成對的數據

????????}*/

????}

????public void setData( List<Map<String, String>> data) {//初始化Lisr類型的對象

????????mData = data;

????????mParameter=data;

????????init();

????}

????private void init() {//實現初始化List類型的對象的方法

????????editorValue.clear();

????????/*isSelected = new HashMap<Integer, Boolean>();

????????if (mData != null) {

????????????for (int i = 0; i < mData.size(); i++) {

????????????????isSelected.put(i, false);

????????????}

????????}*/

????}

????public Map<String,Integer> getSelectedtestItem()

????{

????return selectedtestItem;

????}

????

????public List<Map<String,String>> getmData()

????{

????return mData;

????}

????public List<Map<String,String>> getmParameter()

????{

????????return mParameter;

????}

????@Override

????public int getCount() {//獲得List類型對象的長度;

????????// TODO Auto-generated method stub

????????if (mData != null) {

????????????return mData.size();

????????}

????????return 0;

????}

????@Override

????public Object getItem(int position) {

????????// TODO Auto-generated method stub

????????return null;

????}

????@Override

????public long getItemId(int position) {

????????// TODO Auto-generated method stub

????????return 0;

????}

????private Integer index = -1;//聲明并初始化一個整型變量index

//AdapterListView界面與數據之間的橋梁。當列表里的每一項要顯示時,都會調用AdaptergetView方法返回一個View

????@Override

????public View getView(final int position, View convertView, ViewGroup parent) {

????????// TODO Auto-generated method stub

????????Log.d("zhang", "position = " + position);//Log.d的輸出顏色是藍色的,僅輸出debug調試的意思,但他會輸出上層的信息,過濾起來可以通過DDMSLogcat標簽來選擇.

????????final ViewHolder holder;

????????if (convertView == null) {

????????????convertView = mInflater.inflate(R.layout.listitem, null);//實例化R.layout.listconverViewView對象

????????????holder = new ViewHolder();//ViewHolder就是一個靜態類,使用它緩存了數據的視圖(View),加快UI的響應速度。

????????????//holder.checkBox = (CheckBox) convertView

????????????????????//.findViewById(R.id.checkbox);

????????????

????????????holder.testitemSpinner = (Spinner)convertView.findViewById(R.id.testitems_select);

????????????//if(holder.testitemSpinner.getCount()==0)

????????????//if(holder.testitemSpinner.getPrompt()==null)

????????????//{

????????????????ArrayAdapter<String> a = new ArrayAdapter<String>(

????????????????convertView.getContext(),android.R.layout.simple_spinner_item,testItems);

????????????????holder.testitemSpinner.setAdapter(a);

????????????//}

????????????//holder.testitemSpinner.setTag(position);

????????????holder.testitemSpinner

????????????.setOnItemSelectedListener(new ItemClickSelectListener(

????????????????????holder));//checkinfo_item_value(Spinner)添加ItemSelectedListener監聽器

????????????holder.unit_text = (TextView) convertView.findViewById(R.id.unit_text);

????????????//holder.textView = (TextView) convertView.findViewById(R.id.text);

????????????holder.downbtn = (Button) convertView.findViewById(R.id.downbtn);

????????????holder.downbtn.setFocusable(false);

????????????holder.downbtn.setFocusableInTouchMode(false);

????????????holder.upbtn = (Button) convertView.findViewById(R.id.upbtn);

????????????holder.upbtn.setFocusable(false);

????????????holder.upbtn.setFocusableInTouchMode(false);

????????????holder.editbtn = (Button)convertView.findViewById(R.id.editbtn);

????????????holder.editbtn.setFocusable(false);

????????????holder.editbtn.setFocusableInTouchMode(false);

????????????/*times_edit控件*/

????????????holder.numEdit = (EditText) convertView.findViewById(R.id.times_edit);

????????????holder.numEdit.setTag(position);//numEdit添加一個格外的數據,使用getTag()可將數據取出;

????????????holder.numEdit.setOnTouchListener(new OnTouchListener() {

????????????????@Override

????????????????public boolean onTouch(View v, MotionEvent event) {

????????????????????// TODO Auto-generated method stub

????????????????????if (event.getAction() == MotionEvent.ACTION_UP) {

????????????????????????index = (Integer) v.getTag();

????????????????????}

????????????????????return false;

????????????????}

????????????});

????????????/***********/

????????????/*parameter_edti控件*/

????????????holder.paraEdit = (EditText) convertView.findViewById(R.id.parameter_edit);

????????????holder.paraEdit.setTag(position);//numEdit添加一個格外的數據,使用getTag()可將數據取出;

????????????holder.paraEdit.setOnTouchListener(new OnTouchListener() {

????????????????@Override

????????????????public boolean onTouch(View v, MotionEvent event) {

????????????????????// TODO Auto-generated method stub

????????????????????if (event.getAction() == MotionEvent.ACTION_UP) {

????????????????????????index = (Integer) v.getTag();

????????????????????}

????????????????????return false;

????????????????}

????????????});

????????????/*******/

????????????/*times_edit控件添加編輯響應*/

????????????class MyTextWatcher implements TextWatcher {

?

????????????????public MyTextWatcher(ViewHolder holder) {

????????????????????mHolder = holder;

????????????????}

????????????????private ViewHolder mHolder;

????????????????@Override

????????????????public void beforeTextChanged(CharSequence s, int start,

????????????????????????int count, int after) {

????????????????????// TODO Auto-generated method stub

?

????????????????}

????????????????@Override

????????????????public void onTextChanged(CharSequence s, int start,

????????????????????????int before, int count) {

????????????????????// TODO Auto-generated method stub

????????????????}

????????????????@Override

????????????????public void afterTextChanged(Editable s) {

????????????????????// TODO Auto-generated method stub

????????????????????if (s != null && !"".equals(s.toString())) {

????????????????????????int position = (Integer) mHolder.numEdit.getTag();

????????????????????????// EditText數據發生改變的時候存到data變量中

????????????????????????mData.get(position).put("list_item_timesvalue",

????????????????????????????????s.toString());

????????????????????}

????????????????}

????????????}

????????????holder.numEdit.addTextChangedListener(new MyTextWatcher(holder));

????????????/*********/

????????????/*parameter_edit控件添加編輯響應*/

????????????class ParaTextWatcher implements TextWatcher {

????????????????public ParaTextWatcher(ViewHolder holder) {

????????????????????mHolder = holder;

????????????????}

????????????????private ViewHolder mHolder;

????????????????@Override

????????????????public void beforeTextChanged(CharSequence s, int start,

????????????????????????int count, int after) {

????????????????????// TODO Auto-generated method stub

?

????????????????}

????????????????@Override

????????????????public void onTextChanged(CharSequence s, int start,

????????????????????????int before, int count) {

????????????????????// TODO Auto-generated method stub

?

????????????????}

????????????????@Override

????????????????public void afterTextChanged(Editable s) {

????????????????????// TODO Auto-generated method stub

????????????????????if (s != null && !"".equals(s.toString())) {

????????????????????????int position = (Integer) mHolder.numEdit.getTag();

????????????????????????// EditText數據發生改變的時候存到data變量中

????????????????????????mParameter.get(position).put("list_item_parameter",

????????????????????????????????s.toString());

????????????????????}

????????????????}

????????????}

????????????holder.paraEdit.addTextChangedListener(new ParaTextWatcher(holder));

????????????/********/

????????????holder.downbtn.setOnClickListener(new OnClickListener() {

????????????????@Override

????????????????public void onClick(View v) {

????????????????????// TODO Auto-generated method stub

????????????????????int position = (Integer) holder.numEdit.getTag();

????????????????????Log.d("zhang", "clickposition = " + position);

????????????????????String edittextStr = holder.numEdit.getText().toString();

????????????????????int num = Integer.parseInt(edittextStr);

????????????????????num--;

????????????????????mData.get(position).put("list_item_timesvalue", num+"");

????????????????????holder.numEdit.setText(num+"");

????????????????}

????????????});

????????????holder.upbtn.setOnClickListener(new OnClickListener() {

????????????????@Override

????????????????public void onClick(View v) {

????????????????????// TODO Auto-generated method stub

????????????????????int position = (Integer) holder.numEdit.getTag();

????????????????????String edittextStr = holder.numEdit.getText().toString();

????????????????????int num = Integer.parseInt(edittextStr);

????????????????????num++;

????????????????????mData.get(position).put("list_item_timesvalue", num+"");

????????????????????holder.numEdit.setText(num+"");

????????????????}

????????????});

????????????convertView.setTag(holder);

????????} else {

????????????holder = (ViewHolder) convertView.getTag();

????????????holder.numEdit.setTag(position);

????????????holder.paraEdit.setTag(position);

????????}

????????/*holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

????????????

????????????@Override

????????????public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

????????????????// TODO Auto-generated method stub

????????????????int position = (Integer) holder.numEdit.getTag();

????????????????isSelected.put(position, isChecked);//將對應position鍵值的數值設置為isChecked()返回的值

????????????}

????????});

????????holder.checkBox.setChecked(isSelected.get(position));//更新CheckBox的選擇狀態*/

????????holder.testitemSpinner.setPrompt(promptForSpinner[position]);

????????int spinnerOptionPosition = selectedtestItem.get(promptForSpinner[position]);

????????holder.testitemSpinner.setSelection(spinnerOptionPosition);

????????//if ((spinnerOptionPosition==4)||(spinnerOptionPosition==5))

????????????//holder.unit_text.setText("hz");

????????//else

????????????//holder.unit_text.setText("__");

????????

????????Object value = mData.get(position).get("list_item_timesvalue");

????????if (value != null && !"".equals(value)) {

????????????holder.numEdit.setText(value.toString());

????????} else {

????????????holder.numEdit.setText("200");

????????}

????????holder.numEdit.clearFocus();

????????if (index != -1 && index == position) {

????????????holder.numEdit.requestFocus();

????????}

????????Object value2 = mParameter.get(position).get("list_item_parameter");

????????if (value2 != null && !"".equals(value2)) {

????????????holder.paraEdit.setText(value2.toString());

????????} else {

????????????holder.paraEdit.setText("200");

????????}

????????holder.paraEdit.clearFocus();

????????if (index != -1 && index == position) {

????????????holder.paraEdit.requestFocus();

????????}

????????return convertView;

????}

????

????/*public HashMap<Integer,Boolean> getIsSelected() {

return isSelected;

}*/

?

/*public void setIsSelected(HashMap<Integer,Boolean> isSelected) {

this.isSelected = isSelected;

}*/

????public class ViewHolder {

????????Spinner testitemSpinner;

????????Button editbtn;

????????Button downbtn;

????????EditText numEdit;

????????EditText paraEdit;

????????TextView unit_text;

????????Button upbtn;

?

????}

????private class ItemClickSelectListener implements OnItemSelectedListener {

????????//Spinner testitemSpinner;

????????ViewHolder Iholder;

????????//EditText Iedit;

????????public ItemClickSelectListener(ViewHolder holder) {

????????????//this.testitemSpinner = testitemSpinner;

????????????this.Iholder = holder;

????????}

????????@Override

????????public void onItemSelected(AdapterView<?> parent, View view,

????????????????int position, long id) {

????????????//關鍵代碼

????????????selectedtestItem.put(Iholder.testitemSpinner.getPrompt().toString(), position);

????????????/*根據所選的測試項目,改變第二參數的不同單位和信息*/

????????????if((position==4)||(position==5))

????????????????Iholder.unit_text.setText("hz");

????????????else

????????????????Iholder.unit_text.setText("un");

????????????if((position==0)||(position==1)||(position==2)||(position==6)||(position==7)||(position==8))

????????????????{

????????????????//Iholder.paraEdit.setText("null");

????????????????Iholder.paraEdit.setVisibility(View.INVISIBLE);

????????????????Iholder.unit_text.setVisibility(View.INVISIBLE);

????????????????}

????????????else

????????????????{

????????????????//Iholder.paraEdit.setText("200");

????????????????Iholder.paraEdit.setVisibility(View.VISIBLE);

????????????????Iholder.unit_text.setVisibility(View.VISIBLE);

????????????????}

????????????/***********/

????????????if(position==8)

????????????????Iholder.editbtn.setVisibility(View.VISIBLE);

????????????else

????????????????Iholder.editbtn.setVisibility(View.INVISIBLE);

?

????????????//int p = (Integer) testitemSpinner.getTag();

????????????//selectedtestItem.get(p).put("list_item_Name",

????????????????????//position);

????????}

????????@Override

????????public void onNothingSelected(AdapterView<?> arg0) {

????????}

????}

}

?

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

MyListAdapter mAdapter = new MyListAdapter(this,testItems);//testItems一個String數組;

listView.setAdapter(mAdapter);


?

轉載于:https://www.cnblogs.com/zhlforhe/p/4794710.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272964.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機專業答辯模板,論文答辯模板-計算機專業.ppt

《論文答辯模板-計算機專業.ppt》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《論文答辯模板-計算機專業.ppt(9頁珍藏版)》請在裝配圖網上搜索。1、基于S2SH論壇系統的設計與實現,專業&#xff1a; 姓名&#xff1a; 學號&#xff1a; 指導教師&#xff1a;,(附)論文…

springmvc請求返回一個字符_SpringMVC系列之Web利器SpringMVC

課程簡介&#xff1a;課程目標&#xff1a;了解SpringMVC和Spring的關系&#xff0c;能夠使用SpringMVC框架開發自己的Web應用。整合Spring , SpringMVC , MyBatis搭建項目開發環境&#xff0c;理解三層架構和MVC模式適用人群&#xff1a;適合對Java基礎知識應用自如&#xff0…

一次完整較為滲透過程

步驟一&#xff1a; 利用阿D瀏覽器通過https&#xff1a;//s.bt.gg 注入關鍵字掃描發現注入點&#xff1a; http://www.rqyl.gov.cn/*****.php?ID153 用啊D跑不出賬號密碼 步驟二&#xff1a; 手工注入http://www.rqyl.gov.cn/*****.php?ID153 and 11 、and12出錯 猜字段ht…

html5 filereader讀取文件,H5的FileReader分布讀取文件應該如何使用以及其方法簡介...

這次給大家帶來H5的FileReader分布讀取文件應該如何使用以及其方法簡介&#xff0c;H5的FileReader分布讀取文件的使用以及其方法簡介的注意事項有哪些&#xff0c;下面就是實戰案例&#xff0c;一起來看一下。先介紹一下H5中FileReader的一些方法以及事件FileReader方法名稱 作…

mysql 查詢某一主鍵在那些表中中被設置為外鍵了

use information_schema; show tables; select * from KEY_COLUMN_USAGE where COLUMN_NAMEareaid; 轉載于:https://www.cnblogs.com/liaojie970/p/4799750.html

室內空氣流動原理圖_新風系統原理圖—新風系統原理介紹

如今我們在進行新家的裝修的時候&#xff0c;不少人為了家人的健康著想&#xff0c;都在選購家電的同時會選擇安裝一款新風系統。但是盡管如此&#xff0c;大家對新風系統原理其實并不了解&#xff0c;更不要提新風系統各部分的原理了&#xff0c;下面小編就結合新風系統原理圖…

計算機網絡線路爭用,計算機網絡系統集成復習要點

計算機網絡系統集成復習要點計算機網絡系統集成復習要點1.在信息領域&#xff0c;對于系統集成一般分為軟件集成、硬件集成和網絡系統集成。2.按網絡覆蓋范圍的大小&#xff0c;將計算機網絡分為局域網(LAN)、城域網(MAN)、廣域網(WAN)和互聯網。3. 計算機網絡拓撲結構是指一個…

mrsql查詢第二高的成績_mysql-查找用戶的最高分數和相關的詳細信息

我有一個表,用戶可以在其中存儲分數和有關該分數的其他信息(例如,分數注釋或花費的時間等).我想要一個mysql查詢,該查詢可找到每個用戶的個人最佳成績及其相關的注釋和時間等我嘗試使用的是這樣的&#xff1a;SELECT *,MAX(score)FROM table GROUP BY(用戶)這樣做的問題是,雖然…

centos 7 防火墻和端口配置

開啟redis端口&#xff0c;修改防火墻配置文件 vi /etc/sysconfig/iptables 加入端口配置 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379:7000 -j AC…

計算機網絡實驗11.6.1,6.111 2004春季課程:數位系統概論實驗(Introductory Digital Systems Laboratory, Spring 2004)...

摘要&#xff1a;Lectures and labs on digital logic, flipflops, PALs, counters, timing, synchronization, finite-state machines, and microprogrammed systems prepare students for the design and implementation of a final project of their choice: games, music, …

v380pro設備連接失敗_天貓精靈可以連接臺式電腦使用嗎?需要什么東西? 安裝操作是哪幾個步驟? 最好有圖片解說!...

使用語音將天貓精靈調到【藍牙配對】&#xff1b;打開電腦的藍牙適配界面&#xff0c;讓電腦找到天貓精靈&#xff0c;稍等片刻&#xff0c;點擊【使用遠程裝置的揚聲器聆聽來自此PC的音頻】后的連接&#xff1b;最后調整音量即可。以下是詳細介紹&#xff1a;1、對天貓精靈說【…

SWOT分析是神馬?

SWOT分析是思維的工具來理解事物的方式。人生在世&#xff0c;作為一個獨立的實體&#xff0c;不可避免地需要思考的問題。除非你是豬。豬比這更聰明。眠質量&#xff0c;都要完爆白領&#xff0c;藍領和金領們。SWOT分析分為四個象限。我們用一頭名豬——麥兜來打個例如就清楚…

hive 日誌怎麼查看_Hive各個日志里都存放了什么信息?

審計日志首先&#xff0c;對于審計日志來說&#xff0c;記錄了某個時間點某個用戶從哪個IP發起對HiveServer或者MetaStore的請求以及記錄執行的語句是什么。如下的HiveServer審計日志&#xff0c;表示在2016-02-01 14:51:22 用戶user_chen向HiveServer發起了show tables請求&am…

語音媒體和信令的測試軟件,IP多媒體子系統信令分析工具的設計與實現

摘要&#xff1a;IP多媒體子系統(InternetProtocolMultimediaSubsystem,IMS)為基于IP的移動和固定通信融合提供了基礎,并被業界認為是網絡演進的一個重要階段.與此同時,信令分析工具一直被電信運營商,設備供應商,測試儀器廠商廣泛而深入的關注.一款優秀的信令分析工具,可以使設…

大小寫轉換

1 ;小寫字母的ASCII碼比大寫字母的ASCII碼的值大20H。2 ;比如大寫字母A的ASCII值為01000001 小寫字母a的ASCII碼為&#xff1a;011000013 ;公式為 a(01100001) - 20H(100000) A(01000001)4 ;A(01000001) 20H(100000) a(01100001)5 assume cs:codesg,ds:datasg6 7 datasg seg…

四象限法推導lm曲線_試用幾何方法推導IS曲線(四象限法)

【簡答題】請根據自己的實際情況,撰寫一份適合自己的“征婚啟事”。內容積極健康。文體,字數等不限【填空題】由一棵二叉樹的前序序列和 序列可唯一確定這棵二叉樹。 (1.0分)【判斷題】完全二叉樹一定是滿二查樹。 (1.0分)【判斷題】二叉樹的前序遍歷中,任意一個結點均處于其子…

IDE-Ecplise-代碼注釋 模版 編碼規范 配色

說明&#xff1a; 代碼注釋主要用于方便代碼后期維護&#xff0c;編碼規范&#xff0c;增加代碼閱讀性和維護性。因網上看到的很多博客中片段局多&#xff0c;故整理后重寫一篇&#xff0c;方便交流學習。 先看下加過注釋模版后的效果。如上圖所示&#xff0c;創建類&#xff0…

通過路由遠程計算機重啟,華為無線路由器三種常用重啟的方法

日常重啟無線路由器并不是一個高難度動作&#xff0c;但是你了解華為(HUAWEI)家用無線路由器的三種常用的重啟的方法嗎&#xff1f;這三種方法也適用于絕大多數品牌的路由器&#xff0c;只不過在某個細節上略有區別。華為路由器的三種常用重啟方法分別是&#xff1a;硬重啟、軟…

個人信息管理系統代碼_學生信息管理系統(springboot + vue)

學生信息管理系統零、基礎項目為前后分離項目1、前端(front-end)基于 vue-admin-template 開發2、后端(rear-end)Jdk8Maven3MySQL5.7SpringBoot2SQLYog一、功能模塊圖圖片.png二、系統預覽1、登錄登錄.png2、首頁首頁.png3、查看學生信息查看學生信息.png4、編輯學生信息編輯學…

蘋果手機6s運營商在哪里顯示無服務器,iPhone6s信號很弱或無服務如何解決【解決方法】...

很多果粉都遇到過自己的手機常常“無服務”或者信號很弱的情況。 iphone6s 信號很弱或無服務怎么辦&#xff1f;iPhone手機信號不好的原因有很多&#xff0c;排除SIM卡&#xff0c;手機本身硬件故障等問題&#xff0c;你可以嘗試以下方法“修復”你的手機信號問題。1、開關飛行…