android中listview的自动刷新

listView绑定adapter,adapter绑定数据源list。所以listView的动态刷新实际上是list数据的动态添加。

这时候就必须要说道adapter的一个方法,

 

adapter.notifyDataSetChanged();

通知所附的观察员,底层数据不再有效或可用。一旦调用此适配器不再有效,不应报告更多的数据集更改。

上面的意思就是当list中数据改变后,这个函数会直接刷新界面,更改数据。

注意:notifyDataSetChanged()方法属于更改UI,需要在主线程中才能够被使用。可以使用runONUIThread接口或者将数据用bundle打包传递至UI线程才能正常显示。

activity_main文件

 

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private List data = new ArrayList();
    private boolean isopen =true;
    private ListView listView;
    private  Adapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = findViewById(R.id.listview);
        data.add("text");
        data.add("text");
        adapter = new Adapter(getApplicationContext(),data);
        listView.setAdapter(adapter);
        autoFlash();
    }

    private void autoFlash(){

            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    while (isopen){
                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    data.add("text");
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            adapter.notifyDataSetChanged();
                        }
                    });

                    }
                }
            });

            thread.start();


    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        isopen = false;
    }
}
Adapter类
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by 11929 on 2018/6/20.
 */

public class Adapter extends BaseAdapter {
    private Context mContext;
    private List data;

    public Adapter(Context mContext, List data){
        super();
        this.mContext = mContext;
        this.data = data;
    }

    @Override
    public int getCount() {    //要绑定的数量
        return data.size();
    }

    @Override
    public Object getItem(int position) {  //根据索引获得该位置的对象
        return null;
    }

    @Override
    public long getItemId(int position) {  //获取条目的id
        return 0;
    }

    /**
     *
     * @param position  本条目在数据集的位置
     * @param convertView
     * @param parent
     * @return
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {  //获取该条目的布局界面
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.list_icom,null);
        TextView textView = view.findViewById(R.id.textView);
        ImageView imageView = view.findViewById(R.id.image);
        imageView.setImageResource(R.mipmap.ic_launcher);
        textView.setText(data.get(position));
        return view;
    }
}

 

欢迎来到我的个人博客来互相讨论技术:http://www.strivingtree.com/

 

你可能感兴趣的:(Android)