Выделите пункт Расширяемый просмотр - PullRequest
0 голосов
/ 01 мая 2020

У меня есть 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...