java

先做前端布局1、adapter_view.xml(图片加文本布局)<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><ImageViewandroid:id="@+id/ima1"android:layout_width="50dp"android:layout_height="50dp"android:src="@mipmap/ic_launcher"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="52dp"android:orientation="vertical"><TextViewandroid:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="20dp"android:text="TextView"android:textColor="#FFEBCD"/><TextViewandroid:id="@+id/tv2"android:layout_width="wrap_content"android:layout_height="20dp"android:text="TextView"android:textColor="#000000"/></LinearLayout></LinearLayout>2、activity_main.xml(listview布局,相当于在这里把adapter_view.xml中的布局*N)<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ListViewandroid:id="@+id/lv1"android:layout_width="match_parent"android:layout_height="match_parent"/><!--这里设置一个ListView用来作为显示主界面,后面我们直观看到的就是它--></androidx.constraintlayout.widget.ConstraintLayout>3、在drawable文件中放上rc_1,rc_2,rc_3,rc_4,四张jpg图片,自己随便放,开心就好后端代码我们要把Animal的数据放到Listview中就需要用到adapter,所以这里通过继承BaseAdapter设计一个AnimalAdapter1、新建Animals.java类packagecom.example.test2;publicclassAnimals{privateStringanimal;privateStringanimalTell;privateintimgId;publicAnimals(Stringanimal,StringanimalTell,intimgId){this.animal=animal;this.animalTell=animalTell;this.imgId=imgId;}publicStringgetAnimalTell(){returnanimalTell;}publicvoidsetAnimalTell(StringanimalTell){this.animalTell=animalTell;}publicStringgetAnimal(){returnanimal;}publicvoidsetAnimal(Stringanimal){this.animal=animal;}publicintgetImgId(){returnimgId;}publicvoidsetImgId(intimgId){this.imgId=imgId;}}2.AnimalAdapter.java通过继承BaseAdapter设计packagecom.example.test2;importandroid.content.Context;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;importandroid.widget.TextView;importjava.util.List;publicclassAnimalAdapterextendsBaseAdapter{privateContextcontext;//创建一个上下文对象privateList<Animals>datas;//创建一个List数组,里面存放Animal对象,用来接收MainActivity传过来的数据publicAnimalAdapter(Contextcontext,List<Animals>datas){this.context=context;this.datas=datas;}@OverridepublicintgetCount(){//获取数据的长度returndatas.size();}@OverridepublicObjectgetItem(inti){//适配器放入了很多条数据,获取数据所在的位置returndatas.get(i);}@OverridepubliclonggetItemId(inti){returni;}@OverridepublicViewgetView(inti,Viewview,ViewGroupviewGroup){Animalsanm=(Animals)getItem(i);//实例化给定位置上的对象Viewv;//创建视图v,这是是用来返回给ListView的,作为ListView的子视图ViewHoldviewHold;//创建临时的储存器ViewHold,它的作用是把你getView方法中每次返回的View存起来,可以下次再用if(view==null){v=LayoutInflater.from(context).inflate(R.layout.adapter_view,null);//将adapter_view视图作为子视图放入v中viewHold=newViewHold();//绑定id,建立与adapter_view视图的连接viewHold.animalImage=v.findViewById(R.id.ima1);viewHold.animalName=v.findViewById(R.id.tv1);viewHold.animalTell=v.findViewById(R.id.tv2);v.setTag(viewHold);//储器中的视图设置到v中}else{v=view;viewHold=(ViewHold)v.getTag();}//将制定位置上的数据显示到空间中viewHold.animalName.setText(anm.getAnimal());viewHold.animalTell.setText(anm.getAnimalTell());viewHold.animalImage.setImageResource(anm.getImgId());//返回视图v在main中显示returnv;}classViewHold{//将数据(也就是Animals对象)进行实例化,方便与xml文件里面的控件对接ImageViewanimalImage;TextViewanimalName;TextViewanimalTell;}}3、MainActivity.javapackagecom.example.test2;importandroidx.appcompat.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.Window;importandroid.widget.AdapterView;importandroid.widget.ListView;importandroid.widget.Toast;importjava.util.ArrayList;importjava.util.List;publicclassMainActivityextendsAppCompatActivity{privateListViewmListView1;//创建ListView对象,将这个对象与xml文件中的ListView控件通过id的方式绑定绑定privateList<Animals>datas=newArrayList<Animals>();//创建一个List数组,用来存放数据privateAnimalAdapteranimalAdapter;//用来设置一个适配器的实现类对象@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initDatas();//初始化数据mListView1=(ListView)findViewById(R.id.lv1);//绑定控件animalAdapter=newAnimalAdapter(this,datas);//创建适配器的实现类对象,并且将本类的class对象和定义的数据作为参数传入mListView1.setAdapter(animalAdapter);//为ListView绑定一个适配器mListView1.setOnItemClickListener(newAdapterView.OnItemClickListener(){//为ListView创建一个监听事件,方便我们对它进行操作@OverridepublicvoidonItemClick(AdapterView<?>adapterView,Viewview,inti,longl){Toast.makeText(MainActivity.this,"您单击了"+datas.get(i).getAnimal(),Toast.LENGTH_SHORT).show();}});}privatevoidinitDatas(){//将Animals的实现类对象传到数据列表当中Animalsanimal1=newAnimals("喜羊羊","喜气洋洋过大年",R.drawable.rc_1);Animalsanimal2=newAnimals("懒羊羊","我就是喜欢吃",R.drawable.rc_2);Animalsanimal3=newAnimals("灰太狼","我一定会回来的",R.drawable.rc_3);Animalsanimal4=newAnimals("小灰灰","喜羊羊哥哥,带我一起玩",R.drawable.rc_4);for(inti=0;i<10;i++){datas.add(animal1);datas.add(animal2);datas.add(animal3);datas.add(animal4);}}}转载自https://blog.csdn.net/weixin_46067095/article/details/115741364

java

前面那些鸟玩意终于看完了,吐了,看完了啥也没记住。用到再说吧,先找有用的看。Adapter是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合适的形式显示到view上,提供给用户看!继承结构图一个读取联系人的代码:1、定义列表中每一行的布局,在res/layout目录下新建一个文件list_item.xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><TextViewandroid:id="@+id/list_name"android:layout_width="0dp"android:layout_height="64dp"android:layout_weight="1"android:gravity="center"android:text="简单教程"android:textColor="#0000FF"android:textSize="18sp"/><TextViewandroid:id="@+id/list_phone"android:layout_width="0dp"android:layout_height="64dp"android:layout_weight="1"android:gravity="center"android:text="13888888888"android:textColor="#EA5C4D"android:textSize="18sp"/></LinearLayout>2、修改activity_main.xml添加一个ListView<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="8dp"android:orientation="vertical"><ListViewandroid:id="@+id/listview"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>3、修改MainActivity.javapublicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListViewlist_test=(ListView)findViewById(R.id.list_test);//读取联系人Cursorcursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);SimpleCursorAdapterspcAdapter=newSimpleCursorAdapter(this,R.layout.list_item,cursor,newString[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER},newint[]{R.id.list_name,R.id.list_phone});ListViewlist_view=(ListView)findViewById(R.id.list_view);list_view.setAdapter(spcAdapter);}}读取联系人导致系统崩溃的原因:没有给权限最后AndroidManifest.xml里加个读联系人的权限<uses-permissionandroid:name="android.permission.READ_CONTACTS"/>我加了这一行,依然没用,就去手机设置的权限管理里面手动给开了权限了

2022-9-15 485 0