美文网首页Android开发经验谈
优雅的实现 Recycler View 多布局

优雅的实现 Recycler View 多布局

作者: 死鬼土匪 | 来源:发表于2019-04-04 23:08 被阅读0次

MainActivity

import 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.Toast;

public class MainActivity extends AppCompatActivity {

private RecyclerView recycler;
private MainAdapter mainAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recycler = findViewById(R.id.main_recycler);
    recycler.setLayoutManager(new LinearLayoutManager(this,
            LinearLayoutManager.VERTICAL, false));
    mainAdapter = new MainAdapter(this);
    recycler.setAdapter(mainAdapter);
    onClick();
}

private void onClick()
{
    mainAdapter.setOnItemClickListener(new MainAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View v, RecyclerView.ViewHolder Holder) {
            Toast.makeText(MainActivity.this, "点击 : "+ Holder.getLayoutPosition(),
                    Toast.LENGTH_SHORT).show();
            }

        });
    }


}

MainAdapter

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

public class MainAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int  ITEM_ONE = 1 ;
private static final int  ITEM_TWO = 2 ;
private Context mContext ;
private MainAdapter.OnItemClickListener mListener;

MainAdapter(Context context){
    this.mContext = context ;
}

public interface OnItemClickListener{
    //点击事件
    void onItemClick(View v,RecyclerView.ViewHolder Holder);

}
//添加Set方法
public void setOnItemClickListener(OnItemClickListener mListener){
    this.mListener = mListener;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int 类型) {
    switch (类型){
        case ITEM_ONE :
            return new OneViewHolder(LayoutInflater.from(mContext).inflate(R.layout.main_item_one,viewGroup,false));
        case ITEM_TWO :
            return new TwoViewHolder(LayoutInflater.from(mContext).inflate(R.layout.main_item_two,viewGroup,false));
    }
    return null;
}

@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder Holder, int 条目) {
    switch (Holder.getItemViewType()){
        case ITEM_ONE :

            ((OneViewHolder) Holder).linear.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListener.onItemClick(v, Holder);
                }
            });


            break;
        case ITEM_TWO :
            break;
    }

}

@Override
public int getItemViewType(int 类型) {
    switch (类型 % 2){
        case 0 :
            return ITEM_ONE ;
        case 1 :
            return ITEM_TWO ;
    }
    return ITEM_TWO;
}

@Override
public int getItemCount() {
    return 100;
}

private class OneViewHolder extends RecyclerView.ViewHolder {
    LinearLayout linear ;
    OneViewHolder(View itemView) {
        super(itemView);
        linear = (LinearLayout) itemView.findViewById(R.id.main_linear);
    }
}

private class TwoViewHolder extends RecyclerView.ViewHolder {
    TwoViewHolder(View itemView) {
        super(itemView);
        }
    }
}

相关文章

网友评论

    本文标题:优雅的实现 Recycler View 多布局

    本文链接:https://www.haomeiwen.com/subject/duyciqtx.html