2016-07-03 5 views
1

Предположим, у меня есть RecyclerView, которые содержат пользовательский адаптер вида. Каждый элемент имеет скрытый вид, а его вид имеет значение TAG с другим значением. Например, один из скрытого вида, его TAG содержит значение hidden01.Получить позицию базы предметов по значению TAG адаптера пользовательского вида.

ВОПРОС: откуда вы знаете, какой из View имеет значение hidden01? И как вы знаете, какое положение этого предмета? или Откуда вы знаете позицию этой позиции на TAGhidden view?

UPDATE: Я только приведенный ниже код для моего адаптера, Это также, где я хочу, чтобы получить положение этого пункта, пожалуйста, см последней функции getPositionBaseOnTag.

public class TheRecyclerAdapter extends RecyclerView.Adapter<TheRecyclerAdapter.TheViewHolder> { 

    private Context mContext; 
    private List<TheData> theDataList; 

    public class TheViewHolder extends RecyclerView.ViewHolder{ 

     TextView theHiddenView; 

     public TheViewHolder(View itemView) { 
      super(itemView); 

      theHiddenView = (TextView) itemView.findViewById(R.id.hiddenView); 
     } 
    } 

    public TheRecyclerAdapter(Context context, List<TheData> theDatalist){ 
     this.mContext = context; 
     this.theDataList = theDatalist; 
    } 

    @Override 
    public TheViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_view_adapter, parent, false); 
     return new TheViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final TheViewHolder holder, int position) { 
     TheData theData = theDataList.get(position); 
     holder.theHiddenView.setTag(theData.getHiddenTag()); //Set the TAG of Hidden View here 
    } 

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

    public void deletePosition(int position){ 
     theDataList.remove(position); 
     notifyItemRemoved(position); 
     notifyItemRangeChanged(position,theDataList.size()); 
    } 

    public void removeTheItem(){ 
     deletePosition(getPositionBaseOnTag("my_tag")); 
    } 

    /***Here where I want to return the position of that Item base on TAG**/ 
    public int getPositionBaseOnTag(String theTag){ 
     int itemPosition; 

     //Find the View base on TAG 
     //Get the Position 
     //Done 

     return itemPosition;   
    } 
} 
+0

Вы что-то закодировали? Если да, отправьте свой код. –

ответ

1

Есть два способа сделать это:

1) Цикл по theDataList в вашем методе getPositionBaseOnTag (String theTag) и если theTag соответствует getHiddenTag(), а затем вернуть этот индекс:

public int getPositionBaseOnTag(String theTag) { 
    int length = theDataList.size(); 
    for (int i = 0; i < length; i ++) { 
    if(theDataList.get(i).getHiddenTag().equals(theTag)) { 
     return i; 
    } 
    } 
    // unable to find the tag 
    return -1; 
} 

В цепочке комментариев мы пришли к выводу, что этот подход не подходит для нужд Сейнала.

2) Сделать POJO держать метку и положение и сохранит как вид тега:

Добавить этот внутренний класс TheRecyclerAdapter:

private class TagPojo { 
    int position; 
    String tag; 

    public TagPojo(int position, String tag) { 
    this.position = position; 
    this.tag = tag; 
    } 
} 

Затем в onBindViewHolder сделайте это:

@Override 
    public void onBindViewHolder(final TheViewHolder holder, int position) { 
     TheData theData = theDataList.get(position); 
     holder.theHiddenView.setTag(new TagPojo(position, theData.getHiddenTag())); //Set the TAG of Hidden View here 
    } 

И вы получитеPositionBaseOnTag() должны смотреть как это:

public int getPositionBaseOnTag(TagPojo theTag) { 
    return theTag.position; 
} 

Кроме того, я не знаю, как ваш код компиляции, но я думаю, что ваш метод onBindViewHolder должно быть исправлено:

@Override 
    public void onBindViewHolder(final TheViewHolder holder, int position) { 
     TheData theData = theDataList.get(position); 
     holder.theHiddenView.setTag(theData.getHiddenTag()); //Set the TAG of Hidden View here 
    } 

Последний придираться, убедитесь, что вы вызывают где-то ваш getPositionBaseOnTag(). Сейчас это выглядит неиспользованным.

+0

Спасибо @ Dr.Nitpick, я попробую один из ваших способов. Я буду обновлять вас, если это сработает. Благодаря! Я сожалею о 'onBindViewHolder', который был фактически' holder.theHiddenView.setTag (theData.getHiddenTag()); ', Это был комментарий, который я просто удаляю и раскомментирую, что неправильная строка. Спасибо, в любом случае. – Polar

+0

Какой из них - лучший способ? один «Loop over theDataList» или «pojo для хранения тега»? – Polar

+0

Подход pojo будет более эффективным, если большой каталог DataList. Другой подход более эффективен, если DataList является коротким. Попробуйте их и выберите тот, который кажется вам более изящным. Я лично одобряю подход к поджо. –