您的位置:首页 > 其它

listview和listFragment详细版,已解决chebox的复用,Glide实现图片的圆形,以及按钮添加数据

2016-09-04 20:22 417 查看
listview篇:

XML:

listview:

<?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="match_parent"

android:orientation="vertical">

<ListView

android:id="@+id/listview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"></ListView>

<Button

android:id="@+id/add_listview"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="添加数据"/>

</LinearLayout>
listview_item:

<?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="match_parent"

android:orientation="vertical">

<RelativeLayout

android:layout_width="match_parent"

android:layout_height="wrap_content">

<ImageView

android:id="@+id/image"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:background="@mipmap/ic_launcher"/>

<TextView

android:id="@+id/tv_name"

android:layout_toRightOf="@+id/image"

android:layout_marginLeft="20dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:text="listview"/>

<TextView

android:id="@+id/tv_number"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:layout_centerHorizontal="true"

android:text="listview"/>

<CheckBox

android:id="@+id/cb_cb"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_gravity="right"

android:layout_marginRight="10dp"

/>

</RelativeLayout>

</LinearLayout>

java篇:

数据类:

package com.example.mac.listviewandlistfragment.listview;

/**

* Created by mac on 16/9/1.

*/

public class ListViewBean {

private String mName;

private String mNumber;

private String mImageURL;

private boolean mChebox;

public boolean ismChebox() {

return mChebox;

}

public void setmChebox(boolean mChebox) {

this.mChebox = mChebox;

}

public void setmImageURL(String mImageURL) {

this.mImageURL = mImageURL;

}

public String getmImageURL() {

return mImageURL;

}

public void setmName(String mName) {

this.mName = mName;

}

public void setmNumber(String mNumber) {

this.mNumber = mNumber;

}

public String getmName() {

return mName;

}

public String getmNumber() {

return mNumber;

}

}
adpater:

package com.example.mac.listviewandlistfragment.listview;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.CheckBox;

import android.widget.ImageView;

import android.widget.TextView;

import com.bumptech.glide.Glide;

import com.example.mac.listviewandlistfragment.R;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* Created by mac on 16/9/1.

*/

public class ListViewAdpter extends BaseAdapter{

private List<ListViewBean> listViewBeen;

//解决listview的复用问题

private HashMap<Integer,Boolean>cbMap=new HashMap<>();

private LayoutInflater mInflater;

private Context context;

public ListViewAdpter(Context context,List<ListViewBean> listViewBeen) {

this.listViewBeen = listViewBeen;

this.mInflater = LayoutInflater.from(context);

this.context=context;

// init();

}

//初始化,让复选框全为空

public void init(){

for (int i=0;i<listViewBeen.size();i++){

cbMap.put(i,false);

}

}

@Override

public int getCount() {

return listViewBeen.size();

}

@Override

public Object getItem(int i) {

return listViewBeen.get(i);

}

@Override

public long getItemId(int i) {

return i;

}

@Override

public View getView(final int i, View view, ViewGroup viewGroup) {

ViewHolder holder=null;

if (view==null){

holder=new ViewHolder();

//加载条目的布局

view=mInflater.inflate(R.layout.listview_item,null);

holder.name= (TextView) view.findViewById(R.id.tv_name);

holder.number= (TextView) view.findViewById(R.id.tv_number);

holder.imageView= (ImageView) view.findViewById(R.id.image);

holder.cb= (CheckBox) view.findViewById(R.id.cb_cb);

view.setTag(holder);

}else {

holder= (ViewHolder) view.getTag();

}

holder.name.setText(listViewBeen.get(i).getmName());

holder.number.setText(listViewBeen.get(i).getmNumber());

holder.cb.setChecked(listViewBeen.get(i).ismChebox());

//GlideCircleTransform是自己写的类

Glide.with(context).load(listViewBeen.get(i).getmImageURL()).transform(new GlideCircleTransform(context)).into(holder.imageView);

holder.cb.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

for(int a=0;a<listViewBeen.size();a++){

//初始化checkbox的状态,全部设置为

listViewBeen.get(a).setmChebox(false);

}

listViewBeen.get(i).setmChebox(true);

notifyDataSetChanged();

}

});

return view;

}

private class ViewHolder{

TextView name;

TextView number;

CheckBox cb;

ImageView imageView;

}

}

Activity:

package com.example.mac.listviewandlistfragment.listview;

import android.os.Bundle;

import android.support.annotation.Nullable;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.ListView;

import com.example.mac.listviewandlistfragment.R;

import java.util.ArrayList;

import java.util.List;

/**

* Created by mac on 16/9/1.

*/

public class ListViewActivity extends AppCompatActivity {

private ListViewBean lvb;

private List<ListViewBean> beanList;

private ListView lv;

private ListViewAdpter mAdapter;

private Button bt_add;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.listview);

beanList = new ArrayList<>();

bt_add = (Button) findViewById(R.id.add_listview);

lv = (ListView) findViewById(R.id.listview);

//初始化模拟数据

for (int i = 0; i < 20; i++) {

//对象是地址引用的,改变其中一个数据,就会改变其他引用改对象的值,所以需要在for里面进行实例化

lvb = new ListViewBean();

lvb.setmName("listview");

lvb.setmChebox(false);

lvb.setmNumber(i + "");

lvb.setmImageURL("http://tupian.enterdesk.com/2013/mxy/0810/14/yoona%20%2812%29.jpg");

beanList.add(lvb);

}

mAdapter = new ListViewAdpter(this, beanList);

lv.setAdapter(mAdapter);

for (int i = 0; i < lv.getChildCount(); i++) {

View view = lv.getChildAt(i);

}

}

public void addView (View view){

lvb = new ListViewBean();

lvb.setmChebox(false);

lvb.setmName("添加的数据");

lvb.setmNumber(beanList.size() + "");

lvb.setmImageURL("http://tupian.enterdesk.com/2013/mxy/0810/14/yoona%20%2812%29.jpg");

beanList.add(lvb);

mAdapter.notifyDataSetChanged();

lv.setSelection(beanList.size()-1);

}

}
GlideCircleTransform(用于圆形的设置):

package com.example.mac.listviewandlistfragment.listview;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapShader;

import android.graphics.Canvas;

import android.graphics.Paint;

import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;

import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;

/**

* Created by mac on 16/9/1.

*/

public class GlideCircleTransform extends BitmapTransformation {

public GlideCircleTransform(Context context) {

super(context);

}

public GlideCircleTransform(BitmapPool bitmapPool) {

super(bitmapPool);

}

@Override

protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {

return circleCrop(pool, toTransform);

}

private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {

if (source == null) return null;

int size = Math.min(source.getWidth(), source.getHeight());

int x = (source.getWidth() - size) / 2;

int y = (source.getHeight() - size) / 2;

// TODO this could be acquired from the pool too

Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);

if (result == null) {

result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);

}

Canvas canvas = new Canvas(result);

Paint paint = new Paint();

paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));

paint.setAntiAlias(true);

float r = size / 2f;

canvas.drawCircle(r, r, r, paint);

return result;

}

@Override

public String getId() {

return getClass().getName();

}

}

listFragment篇:使用的是listview的adapter和数据,这个就是fragment加载适配器,Activity加载fragment;代码如下

listFragment:

package com.example.mac.listviewandlistfragment.lisetfragment;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ListView;

import com.example.mac.listviewandlistfragment.R;

import com.example.mac.listviewandlistfragment.listview.ListViewAdpter;

import com.example.mac.listviewandlistfragment.listview.ListViewBean;

import java.util.ArrayList;

import java.util.List;

/**

* Created by mac on 16/9/2.

*/

public class ListFragment1 extends android.app.ListFragment {

private ListViewBean lvb;

private List<ListViewBean> beanList=new ArrayList<>();

private ListViewAdpter mAdapter;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//加载数据

for (int i = 0; i < 20; i++) {

lvb = new ListViewBean();

lvb.setmName("listview");

lvb.setmChebox(false);

lvb.setmNumber(i + "");

lvb.setmImageURL("http://tupian.enterdesk.com/2013/mxy/0810/14/yoona%20%2812%29.jpg");

beanList.add(lvb);

}

mAdapter = new ListViewAdpter(getActivity(), beanList);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragemnt_list, null);

Log.d("shenYao","---------->onCreateView");

setListAdapter(mAdapter);

return view;

}

}

Activity:

package com.example.mac.listviewandlistfragment.lisetfragment;

import android.app.Activity;

import android.app.Fragment;

import android.app.FragmentManager;

import android.app.FragmentTransaction;

import android.os.Bundle;

import android.app.ListFragment;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import com.example.mac.listviewandlistfragment.R;

/**

* Created by mac on 16/9/2.

*/

public class ListFragmentActivity extends Activity {

private Button button;

private FragmentTransaction transaction;

private FragmentManager manager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.fragment);

button= (Button) findViewById(R.id.bt_zk);

manager=getFragmentManager();

transaction=manager.beginTransaction();

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

ListFragment fargment = new ListFragment1();

transaction.replace(R.id.replace, fargment);

transaction.commit();

}

});

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐