I'm trying to generate custom component through a fragment. i followed as below. Now i am getting an error cause the interface method should implement in activity ( context passed is related to activity, not fragment) but i want to handle that method in the fragment. how can i do it? Didi do something wrong?
I am getting an error
MainActivity cannot be cast to EditTextComp$EditTextOnFocusListener
Fragment
public class CropDetailsFragment extends Fragment implements
EditTextComp.EditTextOnFocusListener {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = (RecyclerView) getView().findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
ArrayList<EditTextModel> tx = new ArrayList<EditTextModel>();
EditTextModel cdm = new EditTextModel("", "No of Plants", null);
tx.add(cdm);
adapter = new EditTextCompAdapter(this.getContext(), tx);
recyclerView.setAdapter(adapter);
}
@Override
public void onEditTextchange(String x) {
String xx =x;
}
}
Adapter
public class EditTextCompAdapter extends
RecyclerView.Adapter<EditTextCompAdapter.ViewHolder> {
Context context;
ArrayList<EditTextModel> objects;
public EditTextCompAdapter(Context ctx, ArrayList<EditTextModel> objects) {
context = ctx;
this.objects = objects;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public String text;
public ViewHolder(EditTextComp itemView) {
super(itemView);
}
public void setText(EditTextModel editTextModel) {
EditTextComp edittextView = (EditTextComp) itemView;
edittextView.setdata(editTextModel);
try {
edittextView.setEditTextOnFocusListener( (EditTextComp.EditTextOnFocusListener) context);
} catch (ClassCastException e) {
e.printStackTrace();
Log.e("TAG", e.toString());
}
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
EditTextComp customView = new EditTextComp(context);
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
customView.setLayoutParams(lp);
return new ViewHolder(customView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
EditTextModel edittext = objects.get(position);
holder.setText(edittext);
}
@Override
public int getItemCount() {
return objects.size();
}
}
Custom Component Class
public class EditTextComp extends LinearLayout implements
View.OnFocusChangeListener {
EditText editText = null;
TextView textView = null;
public EditTextComp(Context context) {
super(context, null);
createComponent();
}
public interface EditTextOnFocusListener {
void onEditTextchange(String value);
}
private EditTextOnFocusListener editTextonfocuslistener;
public void setEditTextOnFocusListener(EditTextOnFocusListener listener) {
this.editTextonfocuslistener = listener;
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
EditText value = (EditText) v.findViewById(v.getId());
String x = value.getText().toString();
if (editTextonfocuslistener != null) {
editTextonfocuslistener.onEditTextchange(x);
}
}
switch (v.getId()) {
case R.id.editText:
break;
default:
break;
}
}
public EditTextComp(Context context, AttributeSet attrs) {
super(context, attrs, 0);
createComponent();
}
public EditTextComp(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
createComponent();
}
private void createComponent() {
inflate(getContext(), R.layout.compound_comp_edit_text, this);
editText = (EditText) findViewById(R.id.editText);
textView = (TextView) findViewById(R.id.text);
}
public void setdata(EditTextModel data) {
editText.setText(data.getValue());
editText.setHint(data.getPlaceholder());
textView.setText((data.getTitle()!=null)? data.getTitle():"");
editText.setOnFocusChangeListener(this);
}
}
Im new to android . please help me