日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自定义列表视图

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义列表视图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過繼承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

總結

以上是生活随笔為你收集整理的自定义列表视图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。