结果
1
:
在
AdapterView
的
OnItemClickListener
行单击事件中:
P
osition
:
代表在
AdapterView
中的
行位置
(包括
header
),从
0
开始,获取数据还是使用
parent.getItemAtPosition(position)
I
d
:
代表
adapter
数据源的第几条数据
,从
0
开始,
header
行的
id=-1
,所以也可以用
list.get(id)
或
list.remove(id)
来操作数据集中的数据
代码:见
“附代码
1
”
实验截图:
结果
2
:
在
BaseAdapter
的
getView()
中的
position
代表
adapter
数据源的第几条数据
,从
0
开始。
所以获取数据可以使用
list
(数据源)
.get(position)
;或者使用你覆写的
getItem(position)
方法
代码:见
“附代码
2
”
实验截图:
附代码1:
public class MainActivity extends Activity {
public TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)findViewById(R.id.listView);
tv = (TextView)findViewById(R.id.tv);
View layout1 = getLayoutInflater().inflate(R.layout.list_item, null);
TextView head_tv1 = (TextView)layout1.findViewById(R.id.tv_classifyName);
head_tv1.setText("header1");
head_tv1.setTag(-1);
lv.addHeaderView(layout1);
View layout2 = getLayoutInflater().inflate(R.layout.list_item, null);
TextView head_tv2 = (TextView)layout2.findViewById(R.id.tv_classifyName);
head_tv2.setText("header2");
head_tv2.setTag(-2);
lv.addHeaderView(layout2);
List<Map<String, String>> list = getData();
SimpleAdapter ada = new SimpleAdapter(this, list, R.layout.list_item,
new String[]{"title"}, new int[]{R.id.tv_classifyName});
lv.setAdapter(ada);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
if(id == -1) {
String str = "position: " + position + " id: " + id;
tv.setText(str);
} else {
String str = "position: " + position + " id: " + id;
Map<String, String> map1 = (Map<String, String>)parent.getItemAtPosition(position);
str = str + "\ngetItembyPosition: " + map1.get("title");
tv.setText(str);
}
}
});
}
public ArrayList<Map<String, String>> getData() {
ArrayList<Map<String, String>> list = new ArrayList<Map<String,String>>();
for(int i = 0; i < 20; i++) {
Map<String, String> map = new HashMap<String, String>();
map.put("title", i + " " + i);
list.add(map);
}
return list;
}
}
附代码
2
:
MainActivity
.java:
public class MainActivity extends Activity {
public static TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView)findViewById(R.id.listView);
tv = (TextView)findViewById(R.id.tv);
View layout1 = getLayoutInflater().inflate(R.layout.list_item, null);
TextView head_tv1 = (TextView)layout1.findViewById(R.id.tv_classifyName);
head_tv1.setText("header1");
head_tv1.setTag(-1);
lv.addHeaderView(layout1);
View layout2 = getLayoutInflater().inflate(R.layout.list_item, null);
TextView head_tv2 = (TextView)layout2.findViewById(R.id.tv_classifyName);
head_tv2.setText("header2");
head_tv2.setTag(-2);
lv.addHeaderView(layout2);
List<Map<String, String>> list = getData();
adapter ada = new adapter(this, list);
lv.setAdapter(ada);
}
public ArrayList<Map<String, String>> getData() {
ArrayList<Map<String, String>> list = new ArrayList<Map<String,String>>();
for(int i = 0; i < 20; i++) {
Map<String, String> map = new HashMap<String, String>();
map.put("title", i + " " + i);
list.add(map);
}
return list;
}
}
Adapter.java:
public class adapter extends BaseAdapter {
private Context context;
private LayoutInflater layoutInflater;
private List<Map<String, String>> list;
public adapter(Context context, List<Map<String, String>> list) {
// 获得LayoutInflater的实例
this.context = context;
layoutInflater = LayoutInflater.from(context);
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size(); // 返回列表长度
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);// 返回该位置的Map<>
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public final class ViewHolder {
public TextView tv;
public Button btn;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 设置/获取holder
ViewHolder holder = null;
if (convertView == null) {
// convertView表示某一行的view布局,是已经inflate了的布局
convertView = layoutInflater.inflate(R.layout.list_item,
null);
// 实例化holder中的weight
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.tv_classifyName);
holder.btn = (Button) convertView.findViewById(R.id.btn);
// 给convertView绑定一个额外数据,把ViewHolder缓存起来,方便下次可以getTag()获得该view,直接重用
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// 把holder中的控件与List<>数据源对应起来,即与Map中的key字段对应
final int p = position;
holder.tv.setText(list.get(position).get("title"));
holder.btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String str = "position: " + p + "\nlist.get(p).get('XX'): " + list.get(p).get("title");
MainActivity.tv.setText(str);
}
});
return convertView;
}
}