学习ListView的多布局使用(附带EditText的可编辑状态切换)
一、重点的Adapter
说一下我遇到的问题:
因为我设置的getItemViewType返回的类型值等于getViewTypeCount导致莫名其妙的ArrayIndexOutOfBoundsException,代码中已经说明了。
package com.ahtelit.zbv.myapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Created by Administrator on 2018/4/24.
* qzx
*
* 多布局适配器---ListView
*
*/
public class LVAdapter extends BaseAdapter {
List<HashMap<Integer,String>> datas;
Context mContext;
private static final int TYPE_ONE=0;
private static final int TYPE_TWO=1;
public LVAdapter(Context context, ArrayList<HashMap<Integer,String>> list){
datas=list;
mContext=context;
}
@Override
public int getItemViewType(int position) {
int type=0;
if(datas.get(position).containsKey(TYPE_ONE)){
type=TYPE_ONE;
}else if(datas.get(position).containsKey(TYPE_TWO)){
type=TYPE_TWO;
}
return type;
}
/**
* getViewTypeCount()要大于int getItemViewType(int position)
* 不然会报数组越界异常
* */
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type=getItemViewType(position);
// ViewHolder holder_left=null;
// ViewHolder holder_right=null;
ViewHolder holder=null;
if(convertView==null){
holder=new ViewHolder();
switch (type){
case TYPE_ONE:
convertView= LayoutInflater.from(mContext).inflate(R.layout.left_item_layout,null);
// holder_left=new ViewHolder();
// holder_left.tv=(TextView) convertView.findViewById(R.id.tv_left);
// convertView.setTag(R.id.tv_left,holder_left);
break;
case TYPE_TWO:
convertView= LayoutInflater.from(mContext).inflate(R.layout.right_item_layout,null);
// holder_right=new ViewHolder();
// holder_right.tv=(TextView) convertView.findViewById(R.id.tv_right);
// convertView.setTag(R.id.tv_right,holder_right);
break;
}
//因为就是控件的位置不同一左一右罢了
holder.tv=(TextView) convertView.findViewById(R.id.tv);
convertView.setTag(holder);
}else{
// switch (type){
// case TYPE_ONE:
// holder_left=(ViewHolder) convertView.getTag(R.id.tv_left);
//
// break;
// case TYPE_TWO:
// holder_right=(ViewHolder) convertView.getTag(R.id.tv_right);
// break;
// }
holder=(ViewHolder) convertView.getTag();
}
switch (type){
case TYPE_ONE:
holder.tv.setText(datas.get(position).get(TYPE_ONE));
// holder_left.tv.setText(datas.get(position).get(TYPE_ONE));
break;
case TYPE_TWO:
holder.tv.setText(datas.get(position).get(TYPE_TWO));
// holder_right.tv.setText(datas.get(position).get(TYPE_TWO));
break;
}
return convertView;
}
private class ViewHolder{
TextView tv;
}
}
listview设配器设置的就不说了
二、实现EditText的编辑状态切换
重点就是方法:setFocusableInTouchMode(boolean)
设置为true则在触摸下会弹出键盘可以编辑,false则无法编辑