У меня есть RecyclerView, который отображает список элементов. Эти элементы расширяются при нажатии на них. когда я щелкаю последний элемент в окне повторного просмотра, я не вижу расширенный элемент (потому что нет прокрутки). Я хочу прокрутить выбранный элемент, чтобы стать первым элементом на экране, чтобы уведомить пользователей о наличии других элементов. Я пытался
recyclerView.smoothScrollToPosition(position);
, но он не работает.
public class ChildAdapter extends RecyclerView.Adapter<ChildAdapter.ChildViewHolder> {
Context context;
List<String>stringList;
public ChildAdapter(Context context, List<String> stringList) {
this.context = context;
this.stringList = stringList;
}
@NonNull
@Override
public ChildViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.child_item, parent, false);
return new ChildViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ChildViewHolder holder, int position) {
holder.textView.setText(stringList.get(position));
}
@Override
public int getItemCount() {
return stringList.size();
}
public class ChildViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ChildViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.child_text);
}
}
}
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
private Context context;
private List<String>stringList;
public RecyclerAdapter(Context context, List<String> stringList) {
this.context = context;
this.stringList = stringList;
}
@NonNull
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.layout_item, parent, false);
return new RecyclerViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final RecyclerViewHolder holder, int position) {
holder.headerItem.setText(stringList.get(position));
List<String>strings = new ArrayList<>();
strings.add("child 0");
strings.add("child 1");
strings.add("child 2");
strings.add("child 3");
holder.recyclerView.setAdapter(new ChildAdapter(context,strings));
holder.recyclerView.setLayoutManager(new LinearLayoutManager(context));
holder.recyclerView.setHasFixedSize(true);
holder.headerItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.recyclerView.setVisibility(holder.recyclerView.getVisibility() == View.GONE ? View.VISIBLE : View.GONE);
holder.recyclerView.smoothScrollToPosition(2);
}
});
}
@Override
public int getItemCount() {
return stringList.size();
}
public class RecyclerViewHolder extends RecyclerView.ViewHolder {
RecyclerView recyclerView;
TextView headerItem;
public RecyclerViewHolder(@NonNull View itemView) {
super(itemView);
recyclerView = itemView.findViewById(R.id.child_recycler);
headerItem = itemView.findViewById(R.id.header_tv);
}
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = findViewById(R.id.expandable_recyclerview);
List<String> stringList = new ArrayList<>();
for (int i = 0; i < 30; i++) {
stringList.add("item "+i);
}
recyclerView.setAdapter(new RecyclerAdapter(this, stringList));
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
}
}
Мой код здесь GitHub