Android进度条、自动提示框、下拉框动态数据加载
16lz
2021-12-04
1.进度条实现
布局文件:
<?xml version="1.0" encoding="utf-8"?>
style="?android:attr/progressBarStyleHorizontal" 设置进度条的样式,不设置默认为椭圆状的进度条
实现:
public class MainActivity extends AppCompatActivity { private ProgressBar pb;//进度条 private int progressBar;//进度值 private TextView tv;//显示进度值的文本框 private int code = 1; private MyHandler mh = new MyHandler();//异步处理UI组件 private class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (code == msg.what){ progressBar++; pb.setProgress(progressBar); tv.setText(progressBar + "%"); } } } public void setProgressBar(int progressBar) { this.progressBar = progressBar; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pb = findViewById(R.id.pb); tv = findViewById(R.id.text1); } //进度条 public void setProgress(View view) { if (progressBar == 0){ new MyThread().start(); } } //子线程 private class MyThread extends Thread{ @Override public void run() { super.run(); while (true) { try { Thread.sleep(100);//0.1秒延迟 注:该耗时操作不能放在主线程中!!! } catch (Exception e) { e.printStackTrace(); } if (progressBar == 100) {//进度满100时,要清0 progressBar = 0; break; } Message mg = new Message(); mg.what = 1; mh.sendMessage(mg);//因为子线程无法操控UI组件(进度条组件除外),所以将任务交由Handler进行异步处理 } } }}
效果图:点击加载按钮,进度条就会加载
线程注意事项:
不能在主线程中执行耗时的操作,只能在子线程中操作
另外,在子线程中不能操作主线程中的控件(ProgressBar除外)
2.自动提示框
布局文件:
<?xml version="1.0" encoding="utf-8"?>
实体类:
public class Book { private Integer id; private String name; private Integer image; public Book() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getImage() { return image; } public void setImage(Integer image) { this.image = image; }}
数据准备:
public class BookDAO { public List list() { List bookList = new ArrayList(); String[] names = {"愤怒的小鸟", "汤姆猫", "落汤鸡", "牛牛", "哈巴狗", "神龙", "烤鸭", "小象", "美人鱼", "九尾狐"}; int[] images = {R.drawable.bird, R.drawable.cat, R.drawable.chicken, R.drawable.cow, R.drawable.dog, R.drawable.dragon, R.drawable.duck, R.drawable.elephant, R.drawable.fish, R.drawable.fox}; Book b = null; for (int i = 0; i < names.length; i++) { b = new Book(); b.setId(i + 1); b.setName(names[i]); b.setImage(images[i]); bookList.add(b); } return bookList; }}
展示数据的布局文件:
<?xml version="1.0" encoding="utf-8"?>
实现:
public class MainActivity extends AppCompatActivity { private String[] data1; private ArrayAdapter adapter1; private AutoCompleteTextView act; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); act = findViewById(R.id.alert); //1.准备数据 data1 = new String[]{ "愤怒的小鸟", "汤姆猫", "落汤鸡", "牛牛", "哈巴狗", "神龙", "烤鸭", "小象", "美人鱼", "九尾狐" }; //2.创建适配器 adapter1 = new ArrayAdapter(this,R.layout.adapter_text1,data1); //3.绑定适配器 act.setAdapter(adapter1); }}
效果图:自动提示框中输入'愤怒',会显示愤怒的小鸟
注:自动提示框使用的是数组适配器,通过适配器将数据绑定到要显示的布局文件中,最后为自动提示框设置适配器
3.带图标的下拉框
布局文件:
<?xml version="1.0" encoding="utf-8"?>
数据采用的与上个案例一样,如果不记得了,可以往上翻一翻
上一个案例的数据是有图片资源的
注:这里有一点需要注意,存放图片时必须存放到这个文件中,如下图,否则数据加载时将无法访问到对应的图片资源
展示数据的布局文件:
<?xml version="1.0" encoding="utf-8"?>
实现:
public class MainActivity extends AppCompatActivity { //图片下拉框 private List
效果图:
更多相关文章
- mybatisplus的坑 insert标签insert into select无参数问题的解决
- python起点网月票榜字体反爬案例
- Android(安卓)Adapter详解
- Android搜索框之PopupWindow+ListView实现
- Android应用程序组件Content Provider在应用程序之间共享数据的
- Android(安卓)API开发之OpenGL开发之Android(安卓)OpenGL之使用G
- android 摄像头图像数据YUV转Bitmap, 再转Base64
- Android(安卓)进程和线程
- Android之ScrollView嵌套ListView