1

我正在尝试从 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。
那么如何做同样的事情,但在一个 recyclerview 项目中添加额外的文本视图?

4

1 回答 1

3

使用类似的类

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;
}
于 2016-03-21T14:05:15.760 回答