android基础之适配器复习

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

      }


}

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







  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值