Adapter:关于id和position的实验
2018-03-21 10:45
513 查看
结果1:在AdapterView的OnItemClickListener行单击事件中:Position:代表在AdapterView中的行位置(包括header),从0开始,获取数据还是使用parent.getItemAtPosition(position)Id:代表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.setA
ac62
dapter(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;
}
}
结果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.setA
ac62
dapter(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;
}
}
相关文章推荐
- 关于出现 ArrayAdapter requires the resource ID to be a TextView问题
- 关于listitem点击事件根据position取得数据库数据Onresume()更新Adapter后取得数据错误的问题
- 关于重写的listview adapter中,在getView()方法中,打印语句时,相同的position打印了多次,重复调用问题
- 关于adapter的getView的position问题
- Android之RecyclerView的原生Bug-Inconsistency detected. Invalid view holder adapter positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent}
- 关于Listview,GridView中smoothScrollToPositionFromTop有时滚动到指定position无效
- 关于purge master logs的一个小实验
- 关于用户程序内存的管理的实验(再思考fork)
- (转) ios学习之 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- css中的关于margin-top,position和z-index的一些bug解决方案
- Go语言关于chan理解的实验
- 关于ie 对position定位后的z-index问题
- 关于3DMAX SDK Class_Id
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- 山东理工大学ACM平台题答案关于C语言 1177 C语言实验——时间间隔
- 关于Adapter的The content of the adapter has changed问题分析
- 关于ie 下css div position:relative;定位失效
- [置顶] (柯昌合深入研究Android SimpleAdapter BaseAdapter 的getView(int position, View convertView, ViewGroup pa
- 关于ListView中adapter调用notifyDataSetChanged失效的原因总结
- 关于java类加载的实验