首页 > 解决方案 > 添加项目时,RecyclerView 未固定到顶部

问题描述

在添加了足够的项目以使 RecyclerView 可滚动之后,我有这个 RecyclerView 不想再在位置 0 显示项目。相反,它似乎坚持底部项目并向下滚动这个项目,尽管其他项目添加在位置 0。

public class hauptseite extends AppCompatActivity {
private ArrayList<ExampleItem> mExampleList;
private RecyclerView mRecyclerView;
private ExampleAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private ImageButton btnInput;
private EditText editTextInput;
private int position = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    btnInput = findViewById(R.id.btn_add);
    editTextInput = findViewById(R.id.name_add);

    createExampleList();
    buildRecyclerView();

    btnInput = findViewById(R.id.btn_add);
    editTextInput = findViewById(R.id.name_add);

    btnInput.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String name = editTextInput.getText().toString();
            insertItem(name);
        }
    });
}

public void insertItem(String name) {
    mExampleList.add(position, new ExampleItem(name));
    mAdapter.notifyItemInserted(position);
    editTextInput.setText("");
}

public void removeItem(int position) {
    mExampleList.remove(position);
    mAdapter.notifyItemRemoved(position);
}

public void createExampleList() {
    mExampleList = new ArrayList<>();
}

public void buildRecyclerView() {
    mRecyclerView = findViewById(R.id.recyclerName);
    mRecyclerView.setHasFixedSize(false);
    mLayoutManager = new LinearLayoutManager(this);
    mAdapter = new ExampleAdapter(mExampleList);

    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(mAdapter);

   mAdapter.setOnItemClickListener(new ExampleAdapter.OnItemClickListener(){
       @Override
    public void onDeleteClick(int position) {
        removeItem(position);
    }
    });
}

和适配器

public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {
private ArrayList<ExampleItem> mExampleList;
private OnItemClickListener mListener;

public interface OnItemClickListener {
    void onDeleteClick(int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    mListener = listener;
}

public static class ExampleViewHolder extends RecyclerView.ViewHolder{
    public TextView mTextView1;
    public ImageView mDeleteName;

    public ExampleViewHolder(View itemView, final OnItemClickListener listener) {
        super(itemView);
        mTextView1 = itemView.findViewById(R.id.name_added);
        mDeleteName = itemView.findViewById(R.id.delete_name);

        mDeleteName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {
                        listener.onDeleteClick(position);
                    }
                }
            }
        });
    }
}

public ExampleAdapter(ArrayList<ExampleItem> exampleList) {
    mExampleList = exampleList;
}

@NonNull
@Override
public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false);
    ExampleViewHolder evh = new ExampleViewHolder(v, mListener);
    return evh;
}

@Override
public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
    ExampleItem currentItem = mExampleList.get(position);

    holder.mTextView1.setText(currentItem.getName1());
}

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

那么当我希望我的 RecyclerView 保持在位置 0 的项目时,我需要更改什么,除非我开始向下滚动?

标签: androidandroid-studioandroid-recyclerview

解决方案


您可以滚动到插件上的所需位置:

mLayoutManager.scrollToPosition(yourPosition)

推荐阅读