我试图从html表格行进行recyclerview。
我已经制作了适配器和recycler_item布局。
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private String[] mDataset;
// класс view holder-а с помощью которого мы получаем ссылку на каждый элемент
// отдельного пункта списка
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
// наш пункт состоит только из одного TextView
public LinearLayout Item;
public TextView mTextView;
public TextView mTextView1;
public TextView mTextView2;
public LinearLayout mLabel;
private Context context;
public ViewHolder(View v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.tv_recycler_item);
mTextView1 = (TextView) v.findViewById(R.id.tv_recycler_item2);
mTextView2 = (TextView) v.findViewById(R.id.tv_recycler_item3);
// mLabel = (LinearLayout) v.findViewById(R.id.extended);
Item = (LinearLayout) v.findViewById(R.id.Item);
context = v.getContext();
v.setClickable(true);
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ExtendedActivity.class);
context.startActivity(intent);
}
}
// Конструктор
public RecyclerAdapter(String[] dataset) {
mDataset = dataset;
}
// Создает новые views (вызывается layout manager-ом)
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_maket, parent, false);
// тут можно программно менять атрибуты лэйаута (size, margins, paddings и др.)
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Заменяет контент отдельного view (вызывается layout manager-ом)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mDataset[position]);
}
// Возвращает размер данных (вызывается layout manager-ом)
@Override
public int getItemCount() {
return mDataset.length;
}
在主要活动中有一个循环,它解析html doc,并将elementid文本写入数组。
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
// return inflater.inflate(R.layout.fragment_fragment_task, container, false);
View rootView = inflater.inflate(R.layout.fragment_fragment_task, container, false);
String[] myDataset = getDataSet();
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view);
// если мы уверены, что изменения в контенте не изменят размер layout-а RecyclerView
// передаем параметр true - это увеличивает производительность
mRecyclerView.addItemDecoration(new VerticalItemDecoration(VERTICAL_ITEM_SPACE));
//or
mRecyclerView.addItemDecoration(
new DividerItemDecoration(getActivity()));
//or
mRecyclerView.addItemDecoration(
new DividerItemDecoration(getActivity(), R.drawable.line_divider));
// используем linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
// создаем адаптер
mAdapter = new RecyclerAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
return rootView;
}
private String[] getDataSet() {
String[] mDataSet = new String[];
for (int i = 0; i < 100; i++) {
mDataSet[i] = "parsedhtmldata" + i;
}
return mDataSet;
}
所以这个数组将是recyclerview中textview的文本。
这可以用一个元素进行回收查看。
那么如何做同样的事情,但在一个recyclerview项目中有额外的textview?
答案 0 :(得分:2)
使用类似
的类static class DataSet {
String field1;
String field2;
String field3;
}
然后更改适配器,如下所示
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private DataSet[] mDataset;
// класс view holder-а с помощью которого мы получаем ссылку на каждый элемент
// отдельного пункта списка
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
// наш пункт состоит только из одного TextView
public LinearLayout Item;
public TextView mTextView;
public TextView mTextView1;
public TextView mTextView2;
public LinearLayout mLabel;
private Context context;
public ViewHolder(View v) {
super(v);
mTextView = (TextView) v.findViewById(R.id.tv_recycler_item);
mTextView1 = (TextView) v.findViewById(R.id.tv_recycler_item2);
mTextView2 = (TextView) v.findViewById(R.id.tv_recycler_item3);
// mLabel = (LinearLayout) v.findViewById(R.id.extended);
Item = (LinearLayout) v.findViewById(R.id.Item);
context = v.getContext();
v.setClickable(true);
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ExtendedActivity.class);
context.startActivity(intent);
}
}
// Конструктор
public RecyclerAdapter(DataSet[] dataset) {
mDataset = dataset;
}
// Создает новые views (вызывается layout manager-ом)
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_maket, parent, false);
// тут можно программно менять атрибуты лэйаута (size, margins, paddings и др.)
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Заменяет контент отдельного view (вызывается layout manager-ом)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mDataset[position].field1);
holder.mTextView1.setText(mDataset[position].field2);
holder.mTextView2.setText(mDataset[position].field3);
}
// Возвращает размер данных (вызывается layout manager-ом)
@Override
public int getItemCount() {
return mDataset.length;
}
}
然后更改片段中的方法
private DataSet[] getDataSet() {
DataSet[] mDataSet = new DataSet[100];
for (int i = 0; i < 100; i++) {
DataSet dataSet = new DataSet();
dataSet.field1 = "parsedhtmldata 1" + i;
dataSet.field2 = "parsedhtmldata 2" + i;
dataSet.field3 = "parsedhtmldata 3" + i;
mDataSet[i] = dataSet;
}
return mDataSet;
}