安卓 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里就行

 

mSignalListAdapter.setData(mAdaSignals);
mSignalListAdapter.notifyDataSetChanged();

 


版权声明:本文为weixin_39113870原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。