如何动态添加ListView

如何动态添加ListView,第1张

我不知道你这个难点在哪里,描述太少了。

如果是在viewpager中要动态的添加View(你这里是ListView),那么你只要改变pagerAdapter的数据源List<View>,然后调用adapter.notisfyDataSetChanged()就好了。

如果是说ListView里面的数据要动态改变,你可以先把这个ListView添加到数据源List<View>里,然后写一个ListView的持有 (ListViewHolder)类,构造方法里需要一个handler和一个context。ListViewHolder负责处理listView的相关数据加载之类的就好了。

1.定义Adapter

public class SignalListAdapter extends BaseAdapter {

//信标数组-存储信标名字

private String[] DataList

private Context mContext

public SignalListAdapter(Context context, List<String>DataList){

super()

this.DataList=DataList.toArray(new String[]{})

this.mContext = context

}

@Override

public int getCount() {

return DataList.length

}

public void setData( List<String>DataList){

this.DataList=DataList.toArray(new String[]{})

}

@Override

public Object getItem(int position) {

return isOnline[position]

}

@Override

public long getItemId(int position) {

return position

}

@Override

public View getView(final int index, View convertView, ViewGroup parent) {

if (convertView==null){

convertView=View.inflate(mContext,R.layout.fragment_item,null)

}

//设置fragment中的textview

TextView tx=convertView.findViewById(R.id.fragment_text)

tx.setText(DataList[index])

//设置imageview里单独的click监听

ImageView iv_setting=convertView.findViewById(R.id.iv_setting)

iv_setting.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(mContext,Settings.class)

intent.putExtra("Data",DataList[index])

mContext.startActivity(intent)

}

})

//设置整个fragment的监听

convertView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent

intent=new Intent(mContext,BDMapActivity.class)

intent.putExtra("Data",DataList[index])//

mContext.startActivity(intent)

}

})

return convertView

}

}

这里主要是写getItemId,getItem,getCount,getView这几个方法,Adapter里应该定义这段动态生成所需要的数据是什么,然后在构造函数里进行赋值,getView的方法就是对于动态生成里的每个子项该怎么设置textview,设置监听之类的。

除此之外,还应该自己写个setData方法,用于重新给private的数据进行赋值,告诉Adapter数据已经发生改变

2.使用Adapter进行生成

signalListView=findViewById(R.id.signalList)

mSignalListAdapter=new SignalListAdapter(MainActivity.this,DataList)

signalListView.setAdapter(mSignalListAdapter)

3.对于动态生成的ListView的控件进行更改

当想要对动态生成的控件里面的某一个属性进行更改的时候就麻烦了,这个时候首先应该进行数据的修改,当DataList中的值改变之后,调用之前写的setData方法告诉Adapter数据已经改变, 再调用Adapter的notifyDataSetChanged方法,调用后,Listview里的数据就会重新生成一次,还是在geiView中对于控件的属性进行更改, 数据的改变和notifyDataSetChanged方法写在handler里就行


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11493409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存