在片段中调用适配器方法
Calling an adapter method in a fragment
朋友们,我有一个带有搜索视图和回收视图的片段。我想在 recyclerview data.I 上实现该搜索视图当我尝试从我的适配器 class 在我的片段中调用方法时遇到问题它不允许它并要求我在适配器 class 是静态的,它不是 fine.Here 所需的片段代码 -
private void processQuery(String query) {
// in real app you'd have it instantiated just once
ArrayList<String> result = new ArrayList<>();
// case insensitive search
for (String category : category_name) {
if (category.toLowerCase().contains(query.toLowerCase())) {
result.add(category);
}
}
(MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);
}
我在这一行遇到错误-
(MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);
这是我的 MyAdaper 声明和初始化 -
RecyclerView.Adapter MyAdapter;
MyAdapter = new MyCategoryAdaptercheckbox(getMyCategoryAdapter1, getActivity().getApplicationContext(),category_name);
recyclerView.setAdapter(MyAdapter);
这是我的适配器 class (setCategorynames) method.It 要求我将此方法设为静态 -
public void setCategorynames(List<String> category_name) {
this.category_name = category_name;
notifyDataSetChanged();
}
所以我想知道如何在片段中调用适配器 class 的方法?
我的适配器class代码-
public class MyCategoryAdaptercheckbox extends RecyclerView.Adapter<MyCategoryAdaptercheckbox.ViewHolder> {
List<GetMyCategoryAdapter> getMyCategoryAdapter;
Context context;
List<String> category_name;
GetMyCategoryAdapter getMyCategoryAdapter1;
public MyCategoryAdaptercheckbox(List<GetMyCategoryAdapter> getMyCategoryAdapter, Context context, List<String> category_name) {
this.getMyCategoryAdapter = getMyCategoryAdapter;
this.context = context;
this.category_name = category_name;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
if (viewHolder instanceof ViewHolder){
}
getMyCategoryAdapter1 = getMyCategoryAdapter.get(i);
((ViewHolder) viewHolder).tv_categorytitle.setText(getMyCategoryAdapter1.getC_name());
((ViewHolder) viewHolder).tv_categoryid.setText(getMyCategoryAdapter1.getC_id());
((ViewHolder) viewHolder).gt= getMyCategoryAdapter1;
}
public void filterList(ArrayList<String> filterdNames) {
this.category_name = filterdNames;
notifyDataSetChanged();
}
}
}
我在您的代码中看到的一个问题是 setCategorynames(List<String> category_name) method is not resolved
,因为 MyAdapter
未转换为 (MyCategoryAdaptercheckbox)
您需要更换
(MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);
通过这个
((MyCategoryAdaptercheckbox) MyAdapter).setCategorynames(result);
首先创建一个这样的界面;
public interface ProcessQueryListener{
void onSuccess(List<String> result);
}
在您的适配器中,您应该根据需要实现此侦听器。基本上是这样:
public MyCategoryAdaptercheckbox extends RecyclerView.Adapter implements ProcessQueryListener {
@Override
public void onSuccess(List<String> result){
this.setCategorynames(result);
}
}
.
.
在片段的 processQuery 函数中,您应该调用此 ProcessQueryListener。如;
ProcessQueryListener queryListener = (MyCategoryAdaptercheckbox) MyAdapter;
private void processQuery(String query) {
// in real app you'd have it instantiated just once
ArrayList<String> result = new ArrayList<>();
// case insensitive search
for (String category : category_name) {
if (category.toLowerCase().contains(query.toLowerCase())) {
result.add(category);
}
}
if (queryListener != null) {
queryListener.onSuccess(result);
}
}
朋友们,我有一个带有搜索视图和回收视图的片段。我想在 recyclerview data.I 上实现该搜索视图当我尝试从我的适配器 class 在我的片段中调用方法时遇到问题它不允许它并要求我在适配器 class 是静态的,它不是 fine.Here 所需的片段代码 -
private void processQuery(String query) {
// in real app you'd have it instantiated just once
ArrayList<String> result = new ArrayList<>();
// case insensitive search
for (String category : category_name) {
if (category.toLowerCase().contains(query.toLowerCase())) {
result.add(category);
}
}
(MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);
}
我在这一行遇到错误-
(MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);
这是我的 MyAdaper 声明和初始化 -
RecyclerView.Adapter MyAdapter;
MyAdapter = new MyCategoryAdaptercheckbox(getMyCategoryAdapter1, getActivity().getApplicationContext(),category_name);
recyclerView.setAdapter(MyAdapter);
这是我的适配器 class (setCategorynames) method.It 要求我将此方法设为静态 -
public void setCategorynames(List<String> category_name) {
this.category_name = category_name;
notifyDataSetChanged();
}
所以我想知道如何在片段中调用适配器 class 的方法? 我的适配器class代码-
public class MyCategoryAdaptercheckbox extends RecyclerView.Adapter<MyCategoryAdaptercheckbox.ViewHolder> {
List<GetMyCategoryAdapter> getMyCategoryAdapter;
Context context;
List<String> category_name;
GetMyCategoryAdapter getMyCategoryAdapter1;
public MyCategoryAdaptercheckbox(List<GetMyCategoryAdapter> getMyCategoryAdapter, Context context, List<String> category_name) {
this.getMyCategoryAdapter = getMyCategoryAdapter;
this.context = context;
this.category_name = category_name;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
if (viewHolder instanceof ViewHolder){
}
getMyCategoryAdapter1 = getMyCategoryAdapter.get(i);
((ViewHolder) viewHolder).tv_categorytitle.setText(getMyCategoryAdapter1.getC_name());
((ViewHolder) viewHolder).tv_categoryid.setText(getMyCategoryAdapter1.getC_id());
((ViewHolder) viewHolder).gt= getMyCategoryAdapter1;
}
public void filterList(ArrayList<String> filterdNames) {
this.category_name = filterdNames;
notifyDataSetChanged();
}
}
}
我在您的代码中看到的一个问题是 setCategorynames(List<String> category_name) method is not resolved
,因为 MyAdapter
未转换为 (MyCategoryAdaptercheckbox)
您需要更换
(MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);
通过这个
((MyCategoryAdaptercheckbox) MyAdapter).setCategorynames(result);
首先创建一个这样的界面;
public interface ProcessQueryListener{
void onSuccess(List<String> result);
}
在您的适配器中,您应该根据需要实现此侦听器。基本上是这样:
public MyCategoryAdaptercheckbox extends RecyclerView.Adapter implements ProcessQueryListener {
@Override
public void onSuccess(List<String> result){
this.setCategorynames(result);
}
}
.
.
在片段的 processQuery 函数中,您应该调用此 ProcessQueryListener。如;
ProcessQueryListener queryListener = (MyCategoryAdaptercheckbox) MyAdapter;
private void processQuery(String query) {
// in real app you'd have it instantiated just once
ArrayList<String> result = new ArrayList<>();
// case insensitive search
for (String category : category_name) {
if (category.toLowerCase().contains(query.toLowerCase())) {
result.add(category);
}
}
if (queryListener != null) {
queryListener.onSuccess(result);
}
}