本篇文章主要是我对曾经学过的Listview和GridView,ViewPage的复习篇,不包含RecyclerView...
一、ListView
配置文件
activityu_list.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_centerVertical="true" > </ListView> </RelativeLayout>2.配置文件
list_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/icon" android:layout_width="70sp" android:layout_height="70sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_marginLeft="10dp" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> </LinearLayout>
Bean
package com.xiaoning.adapter; public class ShopInfo { private int icon; private String name; private String content; public ShopInfo(int icon, String name, String content) { super(); this.icon = icon; this.name = name; this.content = content; } public ShopInfo() { // TODO Auto-generated constructor stub } public int getIcon() { return icon; } public void setIcon(int icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } @Override public String toString() { return "ShopInfo [icon=" + icon + ", name=" + name + ", content=" + content + "]"; } }
Activity
package com.xiaoning.adapter; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.example.administrator.demoapplication.R; import java.util.ArrayList; import java.util.List; /** * ListView的使用 */ public class ListViewActivity extends Activity { ListView listview = null; AppAdapter adapter = null; List<ShopInfo> data = null; //外部类的方式 //AppAdapter adapter @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); initData(); listview = (ListView) findViewById(R.id.listview); adapter = new AppAdapter(); //绑定适配器 listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String AppName = data.get(position).getName(); Toast.makeText(ListViewActivity.this, AppName, Toast.LENGTH_LONG).show(); } }); //长按删除 listview.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { data.remove(position); //重新绑定适配器 listview.setAdapter(adapter); //通知Adapter更新item // adapter.notifyDataSetChanged(); return true; } }); } public void initData() { data = new ArrayList<ShopInfo>(); data.add(new ShopInfo(R.mipmap.ic_launcher, "name-1", "content-1")); data.add(new ShopInfo(R.mipmap.ic_launcher, "name-2", "content-2")); data.add(new ShopInfo(R.mipmap.ic_launcher, "name-3", "content-3")); data.add(new ShopInfo(R.mipmap.ic_launcher, "name-4", "content-4")); data.add(new ShopInfo(R.mipmap.ic_launcher, "name-5", "content-5")); data.add(new ShopInfo(R.mipmap.ic_launcher, "name-6", "content-6")); data.add(new ShopInfo(R.mipmap.ic_launcher, "name-7", "content-7")); data.add(new ShopInfo(R.mipmap.ic_launcher, "name-8", "content-8")); } //内部类方式写Adapter class AppAdapter extends BaseAdapter { // 2. 外部类的方式写Adapter /*Context context; ArrayList<ShopInfo> list1; public AppAdapter (Context context,ArrayList<ShopInfo> list){ this.list1=list; this.context=context; } */ @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return data.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @SuppressLint("WrongViewCast") @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder =null; if (convertView == null) { convertView = View.inflate(ListViewActivity.this, R.layout.list_item, null); holder = new ViewHolder(); holder.tv1=(TextView) convertView.findViewById(R.id.content); holder.tv2 = (TextView) convertView.findViewById(R.id.name); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } ShopInfo info = data.get(position); holder.icon.setImageResource(info.getIcon()); holder.tv1.setText(info.getName()); holder.tv2.setText(info.getContent()); return convertView; } } /** * ViewHolder出现在 适配器中通常是为了提高性能,防止listview等内存溢出。 * 第一次findViewById后,再次填充时旧不需要findViewById,只需要从holder中取item */ static class ViewHolder { TextView tv1; TextView tv2; ImageView icon; } }
注意:图片自己替换。
效果:
GridView
activity_grid.xml
<?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="3" android:verticalSpacing="5dp" android:layout_marginTop="10dp" android:id="@+id/grid" > </GridView>
item
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </RelativeLayout>
Bean
package com.xiaoning.adapter; public class shopInfo2 { private String name; private int images; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImages() { return images; } public void setImages(int images) { this.images = images; } public shopInfo2(String name, int images) { super(); this.name = name; this.images = images; } @Override public String toString() { return "shopInfo [name=" + name + ", images=" + images + "]"; } }
GridViewActivity
package com.xiaoning.adapter; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.example.administrator.demoapplication.R; public class GridViewActivity extends Activity implements OnItemLongClickListener { //1.布局文件中写好适配器,以及适配器的item //2.声明适配器 private GridView gridView; private ImagesAdapter1 adapter; private SharedPreferences sp = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_grid); final String[] names = new String[]{"手机通讯", "通讯卫士", "软件管理", "通讯管理", "手机安全", "垃圾清理", "手机杀毒", "缓存清理"}; int[] images = {R.mipmap.pro_1, R.mipmap.pro_2, R.mipmap.pro_3, R.mipmap.pro_4, R.mipmap.pro_5, R.mipmap.pro_6, R.mipmap.pro_7, R.mipmap.pro_8}; //3.绑定ID gridView = (GridView) findViewById(R.id.grid); adapter = new ImagesAdapter1(this, names, images); //自定义适配器 //4.绑定适配器 gridView.setAdapter(adapter); //设置点击事件 gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String name = names[position]; Toast.makeText(GridViewActivity.this, "-->>" + name, Toast.LENGTH_LONG).show(); } }); gridView.setOnItemLongClickListener(this); //sp存储 sp = getSharedPreferences("xnWang", MODE_PRIVATE); } //自定义Adapter 内部实现类的方式 class ImagesAdapter1 extends BaseAdapter { private String[] names; private int[] images; private Context context; private SharedPreferences sp; public ImagesAdapter1(Context context, String[] names, int[] images) { super(); this.names = names; this.images = images; this.context = context; this.sp = context.getSharedPreferences("xnWang", MODE_PRIVATE); } //设置要展示的视图(每个item)的数据总长度 @Override public int getCount() { // TODO Auto-generated method stub return images.length; } //设置当前得到的item @Override public Object getItem(int position) { // TODO Auto-generated method stub return images[position]; } //设置当前得到的位置 @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } ImageView iv = null; //初始化整个gridview的视图 @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { //找到其他layout 控件 convertView = View.inflate(context, R.layout.grid_item, null); } //绑定ID ImageView iv = (ImageView) convertView.findViewById(R.id.imageView1); TextView tv = (TextView) convertView.findViewById(R.id.textView1); //设置每个item的数据 iv.setImageResource(images[position]); tv.setText(names[position]); if (position == 0) { //从sp中读取并显示 String savedName = sp.getString("NAME", null);//读取保存的数据 if (savedName != null) { tv.setText(savedName); } } return convertView; } } //设置长按点击事件 @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { //position为点击的item if (position == 0) { TextView tv = (TextView) findViewById(R.id.textView1); String text = tv.getText().toString(); final EditText ed = new EditText(this); //弹出一个dialog 弹窗 new AlertDialog.Builder(this) .setTitle("修改名称") .setPositiveButton("修改", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String s = ed.getText().toString(); //设置名称后重写保存到sp中 sp.edit().putString("NAME", s).commit(); } }) .setView(ed) .setNegativeButton("取消", null) .show(); } return true; } @Override protected void onDestroy() { super.onDestroy(); } }
效果:
ViewPager
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/realative_main" android:layout_width="match_parent" android:layout_height="160dp"> <android.support.v4.view.ViewPager android:id="@+id/viewpager_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/linear_main" android:layout_width="match_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:gravity="center_horizontal" android:background="#66000000" android:orientation="vertical"> <TextView android:id="@+id/tv_main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:singleLine="true" android:text="我是我I是谁dsadsdsdada" android:textColor="@android:color/white" /> <LinearLayout android:id="@+id/linear2_main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:orientation="horizontal"> </LinearLayout> </LinearLayout> </RelativeLayout>
//这个是自定义View 类似于腾讯qq的选账号的,暂时不发了 <Button android:layout_below="@id/realative_main" android:text="下一个页面" android:onClick="next" android:id="@+id/btn_main" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout>
Activity
package com.example.xiaoning.lunbotu; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; /** * ViewPager自动轮播 */ public class MainActivity extends Activity implements ViewPager.OnPageChangeListener { ViewPager vp; List<ImageView> list; mypagerAdapter adapter; ImageView iv; View pointView; LinearLayout linear; LinearLayout.LayoutParams parameters; TextView tv; String[] content; int oldPosition;//记录小点的位置 int newPosition;//记录当前小点的位置 boolean is;//判断界面是否被销毁 被销毁不执行页面的更新 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); setOnClick(); vp.setAdapter(adapter); //将初始位置设为Integer.value中间的一个值(位置) 这个值在第0个位置 // int pro=5000000 / 2 -(Integer.MAX_VALUE / 2 %list.size()); viewPager一点击 乱跳(bug ) vp.setCurrentItem(5000000);//左右都能无限滑动 //子线程开启轮询 new Thread(new Runnable() { @Override public void run() { is = true; while (is) { try { //两秒跳一次 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } //主线程更新UI runOnUiThread(new Runnable() { @Override public void run() { vp.setCurrentItem(vp.getCurrentItem() + 1); } }); } } }).start(); } @Override protected void onDestroy() { is = false; super.onDestroy(); } private void initData() { tv = (TextView) findViewById(R.id.tv_main); vp = (ViewPager) findViewById(R.id.viewpager_main); adapter = new mypagerAdapter(); //图片资源数组 int[] image = {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e}; //tv信息 content = new String[]{"第一页小小小", "第二页大大大大", "第三页是是是试试我的", "第九大克拉涉及到快乐撒娇的卡", "的快乐撒打开了伞"}; //存储imageView的集合 list = new ArrayList<>(); for (int i = 0; i < image.length; i++) { iv = new ImageView(this); iv.setBackgroundResource(image[i]); list.add(iv); pointView = new View(this);//加小点 pointView.setBackgroundResource(R.drawable.point_button);//圆形背景 linear = (LinearLayout) findViewById(R.id.linear2_main); parameters = new LinearLayout.LayoutParams(10, 10);//LinearLayout下的Parameters if (i != 0) { parameters.leftMargin = 10;//左边距 pointView.setEnabled(false); } linear.addView(pointView, parameters);//添加小点 宽高为5dp } } private void setOnClick() { vp.setOnPageChangeListener(this); } @Override public void onPageScrolled(int i, float v, int i1) { //滚动时调用 } @Override public void onPageSelected(int i) { newPosition = i % list.size();//无限循环 设置的位置 //条目被选中时调用 tv.setText(content[newPosition]); //设置小点的状态 linear.getChildAt(oldPosition).setEnabled(false); linear.getChildAt(newPosition).setEnabled(true); oldPosition = newPosition; } @Override public void onPageScrollStateChanged(int i) { //滚动状态改变时调用 } class mypagerAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE;//返回五个图片的数量 为了实现无限滑动 将其设置为最大值 } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } //当前视图和返回的试图是否是同一个视图 @Override public Object instantiateItem(ViewGroup container, int position) { //position 当前要显示的条目的位置 0 -4 newPosition = position % list.size();//0%5 y余数0 1%5 余数1 container.addView(list.get(newPosition)); return list.get(newPosition); } @Override public void destroyItem(ViewGroup container, int position, Object object) { //要销毁的对象 object container.removeView((View)object); } } public void next(View view){ Intent intent =new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); } }
注意:里面图片情自己添加。
效果: