- 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>
- listview:
- 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();
}
}
- Activity:
- 数据类:
- XML:
- 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();
}
});
}
}
- listFragment: