Created
June 24, 2015 00:20
-
-
Save tuchangwei/f1062f44b985d7b19a62 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ws.otero.adrian.gridexample; | |
import android.graphics.Color; | |
import android.os.Bundle; | |
import android.support.v7.app.ActionBarActivity; | |
import android.support.v7.widget.GridLayoutManager; | |
import android.support.v7.widget.RecyclerView; | |
import android.view.LayoutInflater; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.TextView; | |
public class MainActivity extends ActionBarActivity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
TextView header = new TextView(this); | |
header.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); | |
header.setTextColor(Color.parseColor("#000000")); | |
header.setText("This is the header"); | |
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); | |
recyclerView.setHasFixedSize(true); | |
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2); | |
//If you treat it as a regular element, you’ll see that in fact it will behave as a regular element: | |
//if you have two columns, it will show up next to the first element and not on top | |
//To solve this, you can change the span size of the header so it expands to fit as many columns as you have. | |
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { | |
@Override | |
public int getSpanSize(int position) { | |
return position == 0 ? 2 : 1; | |
} | |
}); | |
recyclerView.setLayoutManager(gridLayoutManager); | |
ElementsAdapter elementsAdapter = new ElementsAdapter(5); | |
elementsAdapter.setHeader(header); | |
recyclerView.setAdapter(elementsAdapter); | |
} | |
public class ElementsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { | |
private static final int VIEW_HEADER = 0; | |
private static final int VIEW_NORMAL = 1; | |
private View headerView; | |
private int datasetSize; | |
public class HeaderViewHolder extends RecyclerView.ViewHolder { | |
public HeaderViewHolder(View v) { | |
super(v); | |
} | |
} | |
public class ViewHolder extends RecyclerView.ViewHolder { | |
public TextView textView; | |
public ViewHolder(TextView v) { | |
super(v); | |
textView = v; | |
} | |
} | |
public ElementsAdapter(int size) { | |
this.datasetSize = size; | |
} | |
public void setHeader(View v) { | |
this.headerView = v; | |
} | |
@Override | |
public int getItemViewType(int position) { | |
return position == 0 ? VIEW_HEADER : VIEW_NORMAL; | |
} | |
@Override | |
public int getItemCount() { | |
return datasetSize + 1; | |
} | |
@Override | |
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | |
if (viewType == VIEW_HEADER) { | |
return new HeaderViewHolder(headerView); | |
} else { | |
TextView textView = (TextView) LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_element, parent, false); | |
return new ViewHolder(textView); | |
} | |
} | |
@Override | |
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { | |
if (position == 0) return; | |
ViewHolder holder = (ViewHolder) viewHolder; | |
holder.textView.setText("Position " + (position - 1)); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment