ListView
今天带来ListView的样式 还有相关功能
先定义一个图标
zuoye_01.xml
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv_main_list"
></ListView>
还得定义另外一个Imageview TextView Button
代码如下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants" > <ImageView android:layout_width="50dp" android:layout_height="50dp" android:id="@+id/iv_item_listview_icon" android:src="@drawable/bird" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/tv_item_listview_title" android:text="XX" android:textSize="30sp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下载" android:id="@+id/btn_item_listview_download" /> </LinearLayout>
注意了 如上代码 需要在xml LinearLayout里面加上一个控件就是
android:descendantFocusability="blocksDescendants"
我在上面加了的 不然会造成控件不兼容的问题 会只有一个可以点 不能点两个
这两片代码 分别是在不同的sml里面 一个分别是zuoye_01.xml 下面那个是item_listview.xml 文件
然后 来到MainActivity.java文件
package com.example.android_06_09; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.view.menu.MenuAdapter; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private ListView lv_main_list; private int images[]={R.drawable.bird,R.drawable.cat,R.drawable.chicken,R.drawable.cow,R.drawable.dog};//设置图标 private String titles[]={"雷天使","Tom猫","KFC","老黑牛","单身狗"};//设置数值 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.zuoye_01); lv_main_list = (ListView) findViewById(R.id.lv_main_list); lv_main_list.setAdapter(new MyAdapter()); //给ListView设置点击事件 lv_main_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this, "跳转到"+titles[i%titles.length]+"页面", Toast.LENGTH_SHORT).show(); } }); } // 如果数据多了 OOM OutOfMemory内存溢出 class MyAdapter extends BaseAdapter{ @Override public int getCount() { return 100000;//一万条数据测试 这是有多少条数据 一般使用titles.length } @Override public Object getItem(int i) { return titles[i%titles.length]; //每一行的内容 } @Override public long getItemId(int i) { return i;//返回的是每一行的下标 } @Override public View getView( final int i, View view, ViewGroup viewGroup) {//拿到每一行的view 有多少行数据 会调用多少次 //把布局文件转成View Log.i("test","i="+i+" "+view); if(view==null){ view=getLayoutInflater().inflate(R.layout.item_listview,null);// 拿到父布局 ItemTag itemTag=new ItemTag(); itemTag.imageView=(ImageView) view.findViewById(R.id.iv_item_listview_icon); itemTag.textView=(TextView) view.findViewById(R.id.tv_item_listview_title); itemTag.button=(Button) view.findViewById(R.id.btn_item_listview_download); view.setTag(itemTag); } ItemTag itemtag=(ItemTag) view.getTag(); //设值 itemtag.imageView.setImageResource(images[i%titles.length]); itemtag.textView.setText(titles[i%titles.length]+i); //给按钮设置点击事件 itemtag.button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "正在下载"+titles[i%titles.length], Toast.LENGTH_SHORT).show(); } }); return view; } }
当然还得定义一个.Java文件 用来调用
我这里命名为:ItemTag.java 如下
import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class ItemTag { public ImageView imageView; public TextView textView; public Button button; }
结果图为下载可以点击 该一列的也可以点击
中间我是做了优化了 一次只会加载14条数据, 就算有一亿条数据,也不会一次性加载 你下拉倒哪里 就加载到哪里
这里我只用了一万条数据 至于左侧图片 可以自己加入到drawable 里面 自己点出来
写的怎么样, 适合新手 请评论 谢谢