RecyclerView是listview的替代品,在V7包里面。listview有的,recyclerview全都有,并且灵活性非常强,同时可以实现glid的多行与多列。recyclerview并没有实现添加addHeadview功能,但是我们可以封装一个headerview,这个百度上大把。recyclerview的横向列表非常方便,只要三句代码就可以了。话不多说,直接上代码。
先写一个界面:
public class VerticalRcActivity extends AppCompatActivity { private RecyclerView recyclerView; private CarBrandAdapter carBrandAdapter; private String[] brands; private static final int ADD_CAR_BRAND_REQUEST = 5002; private static final int ADD_CAR_BRAND_RESULT = 5003; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_vertical_rc); brands = getResources().getStringArray(R.array.car_brand); recyclerView = (RecyclerView)findViewById(R.id.vertical_rc_recyclerview); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.addItemDecoration(new RecyclerViewDivider(this,LinearLayoutManager.HORIZONTAL,1, ContextCompat.getColor(this,R.color.colorPrimaryDark))); recyclerView.setLayoutManager(linearLayoutManager); carBrandAdapter = new CarBrandAdapter(this,brands,handler); recyclerView.setAdapter(carBrandAdapter); LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(this); linearLayoutManager1.setOrientation(LinearLayoutManager.HORIZONTAL); } Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0: Intent intent = new Intent(); intent.putExtras(msg.getData()); setResult(ADD_CAR_BRAND_RESULT,intent); finish(); break; case 1: break; default: break; } } }; }
再写一个适配器:
package project.mygithub.com.myapplication; /** * 系统消息适配器. */ import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; /** * Created by Administrator on 2016/7/1. */ public class CarBrandAdapter extends RecyclerView.Adapter<CarBrandAdapter.ViewHolder> { private LayoutInflater layoutInflater; private Activity activity; private String[] brands; private Handler handler; public CarBrandAdapter(Activity activity, String[] brands, Handler handler){ this.activity = activity; layoutInflater = LayoutInflater.from(this.activity); this.brands = brands; this.handler = handler; }; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = layoutInflater.inflate(R.layout.item_car_brand,parent,false); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { holder.brandNameTv.setText(brands[position]); holder.brandNameTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(activity,"点击了" + position,Toast.LENGTH_SHORT).show(); Bundle bundle = new Bundle(); bundle.putString("carBrand",brands[position]); Message message = Message.obtain(); message.what = 0; message.setData(bundle); handler.sendMessage(message); } }); holder.brandNameTv.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Toast.makeText(activity,"长按了" + position,Toast.LENGTH_SHORT).show(); return false; } }); } @Override public int getItemCount() { return brands.length; } public class ViewHolder extends RecyclerView.ViewHolder{ TextView brandNameTv; public ViewHolder(View itemView) { super(itemView); brandNameTv = (TextView)itemView.findViewById(R.id.brand_name); } } }实现横向滚动列表的话只需要把
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);改成linearLayoutManager1.setOrientation(LinearLayoutManager.HORIZONTAL);
具体请看github: