Я ищу ответ на этот вопрос по всему миру, но не нашел прямого ответа на этот популярный вопрос. Наконец-то я смешал некоторые трюки и решил эту проблему!
Моя проблема началась, когда мой начальник попросил меня использовать RecyclerView внутри ScrollView, а, как вы знаете, мы не можем использовать два объекта Scrollable друг в друге. за исключением случаев, когда мы устанавливаем или знаем фиксировать высоту элемента для нашего RecyclerView. и это ответ:
Шаг 1: сначала вы должны найти высоту гибкого элемента RecyclerView, и это возможно из вашего RecyclerView>onBindViewHolder.
holder.itemView.post(new Runnable() {
@Override
public void run() {
int cellWidth = holder.itemView.getWidth();// this will give you cell width dynamically
int cellHeight = holder.itemView.getHeight();// this will give you cell height dynamically
dynamicHeight.HeightChange(position, cellHeight); //call your iterface hear
}
});
с помощью этого кода вы определяете высоту своего элемента по мере их создания и отправляете высоту элемента в свою деятельность с помощью интерфейса.
для тех друзей, у которых есть проблемы с интерфейсом, я оставляю ниже код интерфейса, который следует написать в адаптере.
public interface DynamicHeight {
void HeightChange (int position, int height);
}
Шаг 2: мы нашли высоту нашего элемента, и теперь мы хотим установить высоту для нашего RecyclerView. сначала мы должны вычислить сумму высоты элемента. на этом шаге мы делаем это с помощью BitMap первого реализует последнего шага интерфейса и пишем этот код ниже внутри вашего Activity или Фрагмент, определяющий ваш RecyclerView:
@Override
public void HeightChange(int position, int height) {
itemHeight.put(position, height);
sumHeight = SumHashItem (itemHeight);
float density = activity.getResources().getDisplayMetrics().density;
float viewHeight = sumHeight * density;
review_recyclerView.getLayoutParams().height = (int) sumHeight;
int i = review_recyclerView.getLayoutParams().height;
}
int SumHashItem (HashMap<Integer, Integer> hashMap) {
int sum = 0;
for(Map.Entry<Integer, Integer> myItem: hashMap.entrySet()) {
sum += myItem.getValue();
}
return sum;
}
Шаг 3: теперь у нас есть сумма вашей высоты RecyclerView. на последнем шаге мы должны просто отправить интерфейс, который мы написали на последнем шаге, в адаптер с таким кодом:
reviewRecyclerAdapter = new ReviewRecyclerAdapter(activity, reviewList, review_recyclerView, this);
когда вы реализуете интерфейс, вы должны отправить его в свой контекст, который я использую этот.
Наслаждайся этим
person
Ashkan
schedule
11.09.2015