android基础之适配器复习

来源:互联网 发布:iptv和网络机顶盒区别 编辑:程序博客网 时间:2024/06/08 12:30

本篇文章主要是我对曾经学过的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);      }}

注意:里面图片情自己添加。
效果:







原创粉丝点击