关于listviewadapter的信息

http://www.itjxue.com  2023-02-27 00:37  来源:未知  点击次数: 

android中不同的listview可以用同一个adapter吗

new 两个 adapter 就可以了。然后设置到对应的list中去

如果是从数据库里读出来的话,既然不同,还是用两个adapter吧,切换的时候另一个clear()。如果是往数据库里写的话,那跟Sqlite有关吧,我不太懂那方面。。。。我也是刚学习android。。。

listview适配器如何实现

创建继承BaseAdapter并实现其抽象方法的类MyListViewAdapter

说明

下面的讲解中,只创建自定义的适配器类,如何使用请参考android中常用控件的使用之ListView

1.创建类MyListViewAdapter

创建类MyListViewAdapter,该类继承BaseAdapter,并实现其抽象方法:

1

2

3

4

int getCount();

Object getItem(int position);

long getItemId(int position);

View getView(int position,View convertView,ViewGroup parent);

getCount需要返回有多少个item,也就是说最会在listview中展示这么多行

getItem需要返回参数position位置的数据

getItemId返回position就行了

2.给MyListViewAdapter类添加成员变量和构造方法

两个成员变量

1

2

ListString list;

Context context;

list表示要显示的数据,context变量在生成View对象时需要用到

构造方法:构造方法是为了给两个成员变量赋值

1

2

3

4

public MyListViewAdapter(ListString list , Context context) {

this.list = list;

this.context = context;

}

3.给getCount,getItem,getItemId方法添加代码

getCount需要返回有多少个item,也就是说最会在listview中展示这么多行,所以返回list.size

getItem需要返回参数position位置的数据,也就是list中第position项的值list.get(position)

getItemId返回position就行了

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@Override

public int getCount() {

return list.size();

}

@Override

public Object getItem(int position) {

return list.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

4.给getView方法添加代码

getView方法是返回位置为position的View对象,第二个参数convertView考虑到资源重用问题,在上下滑动的过程中,需要显示某项的时候才会调用getView方法,而如果有某项被隐藏不显示,就会把不显示那一行的View作为convertView参数传入,如果没有某项被隐藏,convertView值为null。可以通过下面代码中的if(convertView!=null)中的输出来看哪一行被隐藏了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

@Override

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

System.out.println("调用getView方法,显示position="+position+"项");

if(convertView!=null){

TextView t = (TextView) convertView.findViewById(R.id.firstTextView);

System.out.println(t.getText());

}else{

LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = layoutInflater.inflate(R.layout.item_mylistviewadapter, null);

}

TextView t = (TextView)(convertView.findViewById(R.id.firstTextView));

t.setText(list.get(position));

if(position%2==0)

{

t.setBackgroundColor(Color.WHITE);

}

else{

t.setBackgroundColor(Color.GRAY);

}

return convertView;

}

补充:通过xml生成View对象

通过Context对象生成一个LayoutInflater对象

调用LayoutInflater对象的inflate方法生成控件对象,inflate方法的第一个参数为xml文件,第二个参数一般为null。返回值为该xml文件最外层的标签对象。

1

2

LayoutInflater layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

LinearLayout convertView =(LinearLayout)layoutInflater.inflate(R.layout.item_mylistvie

源代码下载

pan.baidu.com/s/1ntuQDdv

如何在listview的adapter中跳转到另一个activity

是由第一个界面跳转到第二个界面中的吗?如果是的话,你开启第二个的时候用startActivityRorResult,然后点击提交之后,先setResult--然后finish把通过或者未通过返回到第一个界面中,在第一个界面覆盖onActivityResult接收返回来的数据,如果需要更改listview里面的状态或者什么的,在adapter里面定义一个方法,里面写上notifyDataSetChanged应该就可以了

android listviewadapter 怎么进行排序

代码片段如下

private?void?sortInfo()?{??

????ComparatorInfoTmp?itemComparator?=?new?ComparatorInfoTmp()?{??

????????public?int?compare(InfoTmp?info1,?InfoTmp?info2){??

????????????return?info1.getAge().compareTo(info2.getAge());??

????????}??

????};??

????Collections.sort(mProfileList,?itemComparator);??

}??

[java]?view?plain?copy?

public?class?UserListAdapter?extends?BaseAdapter?{??

????private?Context?mContext;??

????private?ListInfoTmp?mUserList;??

??

????public?UserListAdapter(Context?context,?ListInfoTmp?users)?{??

????????mContext?=?context;??

????????mUserList?=?users;??

????}??

??

????public?int?getCount()?{??

????????return?mUserList.size();??

????}??

??

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

????????if?(position?=?mUserList.size())?{??

????????????return?null;??

????????}??

????????return?mUserList.get(position);??

????}??

??

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

????????return?position;??

????}??

??

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

????????LayoutInflater?inflater?=?LayoutInflater.from(mContext);??

????????convertView?=?inflater.inflate(R.layout.user_item,?null);??

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

????????ImageView?icon?=?(ImageView)?convertView.findViewById(R.id.icon);??

????????ImageButton?btnEdit?=?(ImageButton)?convertView.findViewById(R.id.edit);??

????????ImageButton?btnDel?=?(ImageButton)?convertView.findViewById(R.id.delete);??

????????//...?...??

????????return?convertView;??

????}??

}??

[java]?view?plain?copy?

private?void?refreshAdapter()?{??

????//?...?...???

????sortInfo();??

????mListVew.setAdapter(new?UserListAdapter(mContext,?mProfileList));??

}

关于ListView的用法包括如何初始化数据

public class MainActivity extends Activity {

//定义数组

private String[] data = { "Apple", "Banana", "Orange", "Watermelon",

"Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango" };

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//adapter适配

ArrayAdapterString adapter = new ArrayAdapterString(

MainActivity.this, android.R.layout.simple_list_item_1, data);

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

listView.setAdapter(adapter);

}

}

潍坊学院学生请采纳

自定义listview数据源adapter时可以继承的类有哪些

Android自定义ListView有下面三个步骤:

第一步:准备主布局文件、组件布局文件等

第二步:获取并整理数据

第三部:绑定数据,这里我们是通过自己编写Adapter类来完成的

自定义listview数据源adapter时可以继承的类有3个,分别如下:

BaseAdapter、SimpleAdapter、ArrayAdapter

1、BaseAdapter

这个是使用到最多的,也是实现功能出来的界面效果是最为明显的。

继承BaseAdapter 是需要实现4个方法的:

?@Override??

????public?int?getCount()?{??

????????return?data.size();??

????}??

????/**?

?????*?获得某一位置的数据?

?????*/??

????@Override??

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

????????return?null;??

????}??

????/**?

?????*?获得唯一标识?

?????*/??

????@Override??

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

????????return?position;??

????}??

??

????@Override??

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

???????????

????????}?

????}

getCount()用来获取数据的长度,getItem(int position)用来获取某一位置的数据,getItemId(int position)用来获取唯一标识 ,最后getView(int position, View convertView, ViewGroup parent)也是最重要的一步,是用来获取返回每一个item的数据。

2、SimpleAdapter

SimpleAdapter使用起来非常方便而且简单,使用SimpleAdapter需要先保存数据,然后保存的数据再通过与写的XML文件中的ID进行绑定即可显示在界面。

ListHashMapString,?Object?personList?;

//list中存放的是map??而map中每个key是属性名称,value是person中的属性值??

personList?=?new?ArrayListHashMapString,?Object();

//循环遍历list,将每一个person加入到map中

for?(Person?p?:?list)?{

HashMapString,Object?map=new?HashMapString,?Object();

map.put("ida",?p.getId());

map.put("namea",?p.getName());

map.put("balancea",?p.getBalance());

personList.add(map);

}

//为ListView添加adapter,simpleadapter中第二个参数是ListHashMapString,?Object

//new?String[]?{?"ida",?"namea",?"balancea"}代表map中的键值,new?int[]?

{?R.id.personid,?R.id.balance,?R.id.name?}

//代表R.layout.item,中的textView的id

view.setAdapter(new?SimpleAdapter(getApplicationContext(),?personList,

R.layout.item,?new?String[]?{?"ida",?"namea",?"balancea"?},

new?int[]?{?R.id.personid,?R.id.balance,?R.id.name?}));

进行绑定后即可显示在界面。

3、ArrayAdapter

ArrayAdapter是使用的最少的一种,因为只能用来显示一个纯文本list。

(责任编辑:IT教学网)

更多

推荐服务器空间文章