【发布时间】:2022-08-06 00:38:30
【问题描述】:
我有一个片段,它有一个 RecyclerView。这个 RecyclerView 有一个 header 适配器,其中包含一个 EditText。
当 Fragment 出现时,我希望 EditText 自动聚焦(即自动显示键盘)。
我该怎么做?
片段:
public class My Fragment extends Fragment {
private LinearLayoutManager layoutManager;
private FeedRecyclerView recyclerView;
private PostAdapter postAdapter;
private ConcatAdapter concatAdapter;
private HeaderAdapter headerAdapter;
private List<Post> postData = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
return inflater.inflate(R.layout.my_fragment, parent, false);
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
recyclerView = view.findViewById(R.id.recycler_view);
layoutManager = new FeedLinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
// This is the adapter that contains the EditText
headerAdapter = new HeaderAdapter(getContext());
postAdapter = new PostAdapter(getContext(), postData, layoutManager);
concatAdapter = new ConcatAdapter();
recyclerView.setAdapter(concatAdapter);
concatAdapter.addAdapter(searchHeaderAdapter);
}
}
适配器类,HeaderAdapter:
public class HeaderAdapter extends RecyclerView.Adapter<HeaderAdapter.ViewHolder> {
private Context context;
public HeaderAdapter(Context context) {
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.my_header, parent, false));
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//
}
@Override
public long getItemId(int position) {
return 1;
}
@Override
public int getItemCount() {
return 1;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public EditText myEditText;
public ViewHolder(View v) {
super(v);
myEditText = v.findViewById(R.id.my_edit_text);
}
}
}
如您所见,我的 RecyclerView 的适配器 HeaderAdapter 具有 EditText。当显示片段时,我想自动聚焦这个 EditText。
我该怎么做?
谢谢
-
为什么需要将 EditText 放在 RecyclerView 中?您可以在一个适配器中拥有多个布局。您可以将 EditText 放在 postAdapter 中,并使用 getItemViewType 来访问 viewholder,而不是只为 headet 使用两个适配器。
-
@AmadYus 现代标准是使用多个适配器,而不是将所有代码放在一个适配器类中
标签: android android-fragments android-recyclerview android-adapter