2015-10-29 2 views
0

Как я могу получить доступ к детям RecyclerView? Я не ищу onClickListener. Я пытаюсь понять, как я могу изменить фон некоторых TextViews в RecyclerView. Я понятия не имею. Любой совет будет принят во внимание.Получить ребенка от RecyclerView

Обратите внимание: прямые дети являются вертикальными LinearLayout s, которые содержат TextView s.

public class MessdatenAdapter extends RecyclerView.Adapter<MessdatenAdapter.ViewHolder> { 
private ArrayList<ArrayList<MessdatenColumn>> list = new ArrayList<ArrayList<MessdatenColumn>>(); 


public static class ViewHolder extends RecyclerView.ViewHolder { 
    // each data item is just a string in this case 
    public LinearLayout llVerticalContainer; 
    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     llVerticalContainer = (LinearLayout) itemLayoutView.findViewById(R.id.layout_messdaten); 
    } 
} 

public MessdatenAdapter(ArrayList<ArrayList<MessdatenColumn>> list) { 
    this.list = list; 
} 

// Create new views (invoked by the layout manager) 
@Override 
public MessdatenAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
                int viewType) { 

    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item_messdaten, parent, false); 
    ViewHolder vh = new ViewHolder(v); 
    return vh; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 

    ArrayList<MessdatenColumn> terminStringList = list.get(position); 
    LayoutInflater inflater = LayoutInflater.from(MainActivity.getMyAppCompatActivity()); 
    holder.llVerticalContainer.removeAllViews(); 

    for(int i = 0; i < terminStringList.size();i++){ 
     TextView tv = (TextView) inflater.inflate(R.layout.item_messdaten_textview, null); 

     if(terminStringList.get(i).getValue().equals("NaN")){ 
      tv.setText("-"); 
     } else { 
      tv.setText(terminStringList.get(i).getValue()); 
     } 

     if (i == 0) { 
      tv.setTypeface(null, Typeface.BOLD); 
     } 
     holder.llVerticalContainer.addView(tv); 
    } 

} 

@Override 
public int getItemCount() { 
    return list.size(); 
} 

}

ответ

1

После того, как вы знаете, положение ребенка от адаптера, вы можете использовать LinearLayoutManager.getChildAt(index) получить childview.

Вы можете использовать это в своей деятельности. Но будьте осторожны, чтобы всегда запрашивать позицию, которая существует, или вы столкнетесь с ошибкой Incosistency Detected.

После того, как все будет сделано, позвоните RecyclerView.Adapter.notifyItemChanged (int position).

+0

Но если ребенок не создан/виден, он сработает? Я хочу установить фоновый и текстовый цвет текста, который является частью дочерних элементов recyclerview. Даже те, которые не видны из-за положения прокрутки. – Bolic

+1

Если дочерний объект был создан ранее, диспетчер компоновки может получить к нему доступ. Если он еще не был создан, вы бы сделали это с помощью параметра в своей модели. – Droidekas

+0

Логически, вы не можете сделать ** изменение ** на вид который еще не нарисован. Вы можете только ** нарисовать ** это на основе того, что ваша модель или набор данных требует, чтобы она была нарисована. – Droidekas

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