1

Я пытаюсь сделать recyclerview из строк таблицы html.
Я сделал адаптер и 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 документа, и записывает 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; 
} 


Так что этот массив будет текст TextView в recyclerview.
Это может сделать recyclerview с одним элементом.
Итак, как сделать то же самое, но с дополнительными текстовыми изображениями в одном элементе recyclerview?

+0

В соответствии с кодом вы уже используете более одно текстовое изображение в элементе recyclerview, но только установка данных для одного текстового просмотра. Дайте мне знать, если я неправильно понял ваш вопрос. – Jickson

+0

@ Jickson Right! Вы хорошо себя чувствуете. В адаптере я устанавливаю три текстовых поля, но в цикле это только один набор данных. Я понятия не имею, как делать все 3 текстовых изображения в циклах при mainactivity. Да, я знаю, мой английский ужасен) – Alex

+0

Я объяснил вам одно возможное решение в моем ответе. Надеюсь, поможет. Дайте мне знать, если вам нужно разъяснение. – Jickson

ответ

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; 
} 
+0

10x много! Я попробую 2 ночи! – Alex

Смежные вопросы