迟疑了几日,感觉或是把这个实例教程写一下吧。尽管在网络上已经一大堆了,可是这是我学习培训的过程我认为我还是该记下来,之后还可以学而不思则罔。
ListView在Android诸多控件中具有非常主要的影响力,也是招聘者喜爱提出问题的控件之一,尤其是对于它的性能优化。这一块我觉得把它留在最终再讲,大家先来谈一谈ListView的简易运用,终究什么全是循序渐进的嘛。
最先我们要先建立一个新项目,开启Android studio点一下File—New—New Project建立一个名叫ListViewTest的新项目。然后寻找res—layout文件夹名称下的activity_main.xml,开启它而且在里面加上ListView控件如下所示:
<ListView
android:id=\"@ id/listview\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\">
</ListView>
这时你假如运作新项目你就会发现里边啥都没有,和一开始建立的这一新项目时没多少差别,由于大家都还没往里加上数据信息而且在View中完成它。因此大家返回MainActivity这一类里边根据findViewById()这一方式寻找这一控件而且完成。大家先理解一个名叫data的一维字符串数组,用于储放人们的假数据信息。随后根据新创建一个ArrayAdapter并按照规定配备它,再Adapte通过setAdapter给ListView,编码如下所示:
private String data[] = {\"aa\",\"bb\",\"cc\",\"dd\",\"aa\",\"bb\",\"cc\",\"dd\",\"aa\",\"bb\",\"cc\",\"dd\",\"aa\",\"bb\",\"cc\",\"dd\"};//假数据信息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.listview);//在图形中寻找ListView
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);//新创建并配备ArrayAapeter
listView.setAdapter(adapter);
}
点一下运作新项目你也就能见到一个简便的ListView:
如今看到了页面了可是离让我们的预期或是有点儿差别,大家期待的是除开可以看还能点一下回应一些事情,因而大家再替它加上一个监视点一下的方式。编码如下所示:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
switch (i){
case 0:
Toast.makeText(MainActivity.this,\"你点一下了\" i \"按键\",Toast.LENGTH_SHORT).show();
break;//在我们点一下某一项就能土司面包大家点了哪一项
case 1:
Toast.makeText(MainActivity.this,\"你点一下了\" i \"按键\",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this,\"你点一下了\" i \"按键\",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this,\"你点一下了\" i \"按键\",Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(MainActivity.this,\"你点一下了\" i \"按键\",Toast.LENGTH_SHORT).show();
break;
}
}
});
这儿我便给了5项Item进行了回应,自然也能让每一项都是有相应的,有兴趣爱好自身可以去试着。那样一个十分简单的ListView就完成了,下面让我们来深层次一点点。
如今我们要订制一个有照片有文本有选择框的ListView,怎么做呢?第一个大家一定要把数据信息改一下,可是大家毫无疑问不太可能说把二维数组data改为二维数据信息就可以的,由于照片并不是字符串数组的方式啊。那要包括字符串数组又能包括照片的数据类型有哪些呢?这时Bean类就产生了,我们可以把那些数据信息封装形式到一个Bean类里边啊,在我们必须的过程中就立即拿出来就行。说做就做随后大家界定一个myBean类,编码如下所示:
public class myBean {
private String text;//用于放文本的
private int ImageID;//用于放照片的
public myBean(String text,int imageID){
this.ImageID = imageID;
this.text = text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getImageID() {
return ImageID;
}
public void setImageID(int imageID) {
ImageID = imageID;
} }
随后大家就可以根据复位持续的New一个一个的数据信息了,可是大家如何放入ListView里边呢?由于大家刚刚用的是操作系统的ArrayAdapter来兼容到ListView的,大家乃至连要兼容的XML的页面都没。那咱们先去做一个我们要兼容的页面去看看,因此:
<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:orientation=\"vertical\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\">
<LinearLayout
android:id=\"@ id/ll_view\"
android:gravity=\"center\"
android:layout_margin=\"10dp\"
android:orientation=\"horizontal\"
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\">
<ImageView
android:background=\"@mipmap/ic_launcher\"
android:id=\"@ id/headimage\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\" />
<TextView
android:layout_marginLeft=\"20dp\"
android:layout_weight=\"1\"
android:text=\"你是SB\"
android:id=\"@ id/headtext\"
android:layout_width=\"0dp\"
android:layout_height=\"wrap_content\" />
<RadioGroup
android:id=\"@ id/radioBtn\"
android:orientation=\"horizontal\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\">
<RadioButton
android:text=\"打他\"
android:id=\"@ id/radio2\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\" />
<RadioButton
android:text=\"不打\"
android:id=\"@ id/radio1\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\" />
</RadioGroup>
</LinearLayout>
</LinearLayout>
因此大家把以前的R.layout.simple_list_item_1这XML改成大家立即做的,运作程序流程你也就会发觉程序流程崩了。嘿嘿,没事儿这也是常规的由于大家传到的统计数据都没有用兼容到咱们的页面上。因此人们就只有自身读过一个电源适配器来兼容我们自己的数据信息。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
电源适配器编码如下所示:
public class myAdapter extends ArrayAdapter {
private final int ImageId;
private String radiotext;
public myAdapter(Context context, int headImage, List<myBean> obj){
super(context,headImage,obj);
ImageId = headImage;//这个是传到我们自己理解的页面
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
myBean myBean = (myBean) getItem(position);
View view = LayoutInflater.from(getContext()).inflate(ImageId,parent,null);//这个是创建对象一个我们自己写的页面Item
LinearLayout linearLayout = view.findViewById(R.id.ll_view);
ImageView headImage = view.findViewById(R.id.headimage);
TextView headText = view.findViewById(R.id.headtext);
RadioGroup radio = view.findViewById(R.id.radioBtn);
headImage.setImageResource(myBean.getImageID());
headText.setText(myBean.getText());
radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {//查验Radio Button那一个被点开了
@Override
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
switch (i){
case R.id.radio1:
radiotext = \"不打\";
break;
case R.id.radio2:
radiotext = \"打他\";
break;
}
}
});
linearLayout.setOnClickListener(new View.OnClickListener() {//查验哪一项被点开了
@Override
public void onClick(View view) {
Toast.makeText(getContext(),\"你点一下了第\" position \"项\" \"你挑选\" radiotext,Toast.LENGTH_SHORT).show();
}
});
return view;
}}
如今电源适配器也写好啦,你看看订制ListView的2个流程是否就是这样就被大家解决了,随后大家就差兼容了。下面让我们来做一下兼容:
public class MainActivity extends AppCompatActivity {
private List<myBean> myBeanList = new ArrayList<>();//用于封装数据的二维数组
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.listview);
init();
myAdapter adapter = new myAdapter(MainActivity.this,R.layout.myitem,myBeanList);
listView.setAdapter(adapter);
}
private void init(){//复位数据信息
myBean bean1 = new myBean(\"aa\",R.mipmap.ic_launcher);
myBeanList.add(bean1);
myBean bean2 = new myBean(\"ss\",R.mipmap.ic_launcher);
myBeanList.add(bean2);
myBean bean3 = new myBean(\"jj\",R.mipmap.ic_launcher);
myBeanList.add(bean3);
myBean bean4 = new myBean(\"hh\",R.mipmap.ic_launcher);
myBeanList.add(bean4);
myBean bean5 = new myBean(\"dd\",R.mipmap.ic_launcher);
myBeanList.add(bean5);
myBean bean6 = new myBean(\"cc\",R.mipmap.ic_launcher);
myBeanList.add(bean6);
myBean bean7 = new myBean(\"bb\",R.mipmap.ic_launcher);
myBeanList.add(bean7);
myBean bean8 = new myBean(\"jj\",R.mipmap.ic_launcher);
myBeanList.add(bean8);
myBean bean9 = new myBean(\"kk\",R.mipmap.ic_launcher);
myBeanList.add(bean9);
}
保证这儿我觉得大家都几乎基本了解了如何订制ListView了吧?哦对了!我还在写电源适配器的过程中顺带把监视事情加进去了,自然在主类写也是可以的,可是不建议那样做。对于为什么?你自己试一下就知道,由于纸上得来绝知浅嘛。
最终上一张设计效果图吧:
发觉有许多BUG呢!但是那都不是事儿,终究没哪个APP是沒有BUG的是否?
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。