当从列表中选择项目时,该项目不会显示在文本视图(编辑器片段)中



EditorFragment , textview : onclick, dialogfragment 将打开, 对话片段,两部分:a(搜索字段b(回收器视图。 适配器 ,它处理,从列表中选择项目。

编辑器片段代码:在编辑器片段中,在项目被选中后,该项目将显示在文本视图中;

public class EditorFragment extends Fragment {
public static TextView tv_custom_spinner;
private Context context;
SearchAdapter searchAdapter = null;
List<SearchModel> searchModelList ;

public EditorFragment(Context context) {
this.context = context;
// Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_blank, container, false);
searchModelList = new ArrayList<>();
searchModelList.add(new SearchModel("First Name"));
searchModelList.add(new SearchModel("Second Name"));
searchModelList.add(new SearchModel("Third Name"));
searchModelList.add(new SearchModel("Fourth Name"));
searchModelList.add(new SearchModel("Fifth Name"));
searchModelList.add(new SearchModel("Sixth Name"));
searchAdapter = new SearchAdapter(context,searchModelList);
setResources(view);
clickSpinner();
return view;
}
private void setResources(View view){
tv_custom_spinner = view.findViewById(R.id.tv_custom_spinner);
}
private void clickSpinner(){
tv_custom_spinner.setOnClickListener(v->{
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
SpinnerDialogfragment spinnerDialogFragment= new  SpinnerDialogfragment(context, searchModelList);
spinnerDialogFragment.show(fragmentManager, "SPINNER");
});
searchAdapter.setUpdateDataListener(value -> tv_custom_spinner.setText(value));
}
}

适配器代码 :

public class SearchAdapter  extends RecyclerView.Adapter<SearchAdapter.SearchHolder>{
private Context context;
private List<SearchModel> searchModelsList;
private String title;

public interface UpdateDataListener{
void onItemSelected(String value);
}
public UpdateDataListener listener;
public SearchAdapter(Context context, List<SearchModel> searchModelsList) {
this.context = context;
this.searchModelsList = searchModelsList;
this.listener = null;
}
public  void setUpdateDataListener(UpdateDataListener listener){
this.listener = listener;
}
@NonNull
@Override
public SearchAdapter.SearchHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
View view = LayoutInflater.from(context).inflate(R.layout.search_item_list, null);
return new SearchHolder(view);
}
@Override
public void onBindViewHolder(@NonNull SearchHolder searchHolder, int position) {
searchHolder.tv_searched_item.setText(searchModelsList.get(position).getItemTitle());
searchHolder.itemView.setOnClickListener(v -> {
title = searchModelsList.get(position).getItemTitle();
listener.onItemSelected(title);
});
}
@Override
public int getItemCount() {
return searchModelsList.size();
}
class SearchHolder extends RecyclerView.ViewHolder{
private TextView tv_searched_item;
public SearchHolder(@NonNull View itemView) {
super(itemView);
tv_searched_item = itemView.findViewById(R.id.tv_searched_item);
}
}
}

错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.coco.myapplication, PID: 25724
java.lang.NullPointerException: Attempt to invoke interface method 'void com.coco.myapplication.SearchAdapter$UpdateDataListner.onItemSelected(java.lang.String)' on a null object reference
at com.coco.myapplication.SearchAdapter.lambda$onBindViewHolder$0$SearchAdapter(SearchAdapter.java:53)
at com.coco.myapplication.-$$Lambda$SearchAdapter$fc2DFbNCnzN7ljubXWaQ4mEoai8.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:6608)
at android.view.View.performClickInternal(View.java:6585)
at android.view.View.access$3100(View.java:782)
at android.view.View$PerformClick.run(View.java:25945)
at android.os.Handler.handleCallback(Handler.java:874)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:198)
at android.app.ActivityThread.main(ActivityThread.java:6729)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

进程 25724 已终止。

在你的片段中 onviewcreated(( 调用

setUpdateDataListener("pass your listner")

然后重试。空期望应该消失,它应该有效

onViewCreated方法中初始化此DataListener

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_blank, container, false);
searchModelList = new ArrayList<>();
searchModelList.add(new SearchModel("First Name"));
searchModelList.add(new SearchModel("Second Name"));
searchModelList.add(new SearchModel("Third Name"));
searchModelList.add(new SearchModel("Fourth Name"));
searchModelList.add(new SearchModel("Fifth Name"));
searchModelList.add(new SearchModel("Sixth Name"));
searchAdapter = new SearchAdapter(context,searchModelList);
//Initialise  DataListener here
searchAdapter.setUpdateDataListener(new UpdateDataListener() {
@Override
public void onItemSelected(String value) {
tv_custom_spinner.setText(value);
}
});
setResources(view);
clickSpinner();
return view;
}

最新更新