1.自定义加减
import android.content.Context; import android.content.res.TypedArray; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; public class CustomView extends LinearLayout { private EditText content1; public CustomView(Context context) { super(context); } public void fz(String shu){ content1.setText(shu); } public CustomView(final Context context, @Nullable AttributeSet attrs) { super(context, attrs); View view = LayoutInflater.from(context).inflate(R.layout.addjian, null); addView(view); Button revserse=view.findViewById(R.id.revserse); Button add=view.findViewById(R.id.add); content1 = view.findViewById(R.id.ed); TypedArray typedArray=context.obtainStyledAttributes(attrs,R.styleable.CustomView); String string = typedArray.getString(R.styleable.CustomView_et); content1.setText(string); revserse.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { String result = content1.getText().toString().trim(); Integer integer = Integer.valueOf(result); if (integer>1){ integer--; content1.setText(integer+""); if (lietener!=null){ lietener.onListener(integer); } } } }); add.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { String result = content1.getText().toString().trim(); Integer integer = Integer.parseInt(result); integer = integer + 1; Toast.makeText(context,""+integer,Toast.LENGTH_SHORT).show(); content1.setText(integer+""); String s = content1.getText().toString(); System.out.println("s = " + s); if (lietener!=null){ lietener.onListener(integer); } } }); } public SetOnChangerLietener lietener; public void setOnChangerLietener(SetOnChangerLietener lietener){ this.lietener=lietener; } interface SetOnChangerLietener{ public void onListener(int content); } public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } }
attrs自定义属性
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CustomView"> <attr name="et" format="string"/> </declare-styleable> </resources>3、自定义的布局<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="300dp"> <CheckBox android:id="@+id/goodselect" android:layout_width="30dp" android:layout_height="30dp" android:layout_gravity="center" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center_vertical" android:layout_marginLeft="20dp" > <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名字" /> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="价钱" /> <com.bwie.shopdemo.CustomView android:id="@+id/cv" android:layout_marginLeft="30dp" app:et="3" android:layout_width="wrap_content" android:layout_height="wrap_content"></com.bwie.shopdemo.CustomView> </LinearLayout> </LinearLayout>4.MainActivityimport android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.CheckBox; import android.widget.TextView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private RecyclerView rv; private CheckBox allselect1; private TextView zprice; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rv = (RecyclerView) findViewById(R.id.rv); allselect1 = (CheckBox) findViewById(R.id.allselect); zprice = (TextView) findViewById(R.id.zprice); final TextView znum= (TextView) findViewById(R.id.znum); final ArrayList<Bean> list = new ArrayList<>(); for (int i = 0; i <20 ; i++) { list.add(new Bean("信息"+i,200+i,1+i)); } rv.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); final MyAdapter adapter = new MyAdapter(this, list); rv.setAdapter(adapter); adapter.SetCheckListener(new MyAdapter.SetCheckListener() { @Override public void onListener(boolean check, int po) { boolean allselect=true; int price=0; int num=0; for (int i = 0; i <list.size() ; i++) { if (list.get(i).isSelect()){ price+=list.get(i).getPrice()*list.get(i).getNum(); num+=list.get(i).getNum(); } } for (int i = 0; i <list.size() ; i++) { if (!list.get(i).isSelect()){ allselect=false; break; } } zprice.setText(price+"元"); znum.setText(num+""); if (allselect){ allselect1.setChecked(true); }else{ allselect1.setChecked(false); } } }); allselect1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean ischeck=allselect1.isChecked(); int price=0; int num=0; for (int i = 0; i <list.size() ; i++) { list.get(i).setSelect(ischeck); if (ischeck){ if (list.get(i).isSelect()){ price+=list.get(i).getPrice()*list.get(i).getNum(); num+=list.get(i).getNum(); } } } adapter.notifyDataSetChanged(); zprice.setText(price+"元"); znum.setText(num+""); } }); } }5.Adapterimport android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.TextView; import java.util.List; public class MyAdapter extends RecyclerView.Adapter { private Context context; private List<Bean> list; public MyAdapter(Context context, List<Bean> list) { this.context = context; this.list = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item, null); ViewHolder1 viewHolder1 = new ViewHolder1(view); return viewHolder1; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { if (holder instanceof ViewHolder1){ ViewHolder1 viewHolder1= (ViewHolder1) holder; viewHolder1.name.setText(list.get(position).getName()); viewHolder1.price.setText(list.get(position).getPrice()+""); viewHolder1.cv.fz(list.get(position).getNum()+""); if (list.get(position).isSelect()){ if (!viewHolder1.goodselect.isChecked()){ viewHolder1.goodselect.setChecked(true); } }else{ viewHolder1.goodselect.setChecked(false); } viewHolder1.goodselect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean isSelect = list.get(position).isSelect(); list.get(position).setSelect(!isSelect); notifyDataSetChanged(); if (listener!=null){ listener.onListener(!isSelect,position); } } }); viewHolder1.cv.setOnChangerLietener(new CustomView.SetOnChangerLietener() { @Override public void onListener(int content) { list.get(position).setNum(content); notifyDataSetChanged(); if (listener!=null){ listener.onListener(list.get(position).isSelect(),position); } } }); } } @Override public int getItemCount() { return list.size(); } public SetCheckListener listener; public void SetCheckListener(SetCheckListener listener){ this.listener=listener; } public interface SetCheckListener{ public void onListener(boolean check,int po); } class ViewHolder1 extends RecyclerView.ViewHolder{ CheckBox goodselect; TextView name; TextView price; CustomView cv; public ViewHolder1(View itemView) { super(itemView); goodselect=itemView.findViewById(R.id.goodselect); name=itemView.findViewById(R.id.name); price=itemView.findViewById(R.id.price); cv=itemView.findViewById(R.id.cv); } } }