How to call a fragment function from a user adapter

I created a function in a fragment. And I want to call this function when I click the button that is in the user adapter, but I can not call the fragment function from the user adapter.

My code for the adapter is to click on the button and call the snippet function

                 viewHolder.accept.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                removeListItem(viewHolder.order_card_layout, position);

                android.support.v4.app.Fragment newFragment = new NewPageActivity();
                android.support.v4.app.FragmentTransaction ft = ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction();

                 ft.sendorder(data.getorder_id());
                ft.add(R.id.framelay, newFragment).commit();


            }
        });

My function, which is in the fragment

    public class NewPageActivity extends Fragment{
        public void SendOrder( String OrderId)
{

    final String serverid = sp.getString("serverid", "null");
    Log.e("TAG", "SendOrder: "+serverid +OrderId );
    new SendOrder().execute(new Config().addNewOrder, serverid, OrderId);
}
      }
+4
source share
6 answers

Create an interface class in the adapter and implement the fragment in your class, as shown below.

Internal adapter class

         public Interface CallBack{
         void yourMethodName();

         }

Now in the fragment class we implement your interface method, as shown below

public class YourFragment implements CallBack{
     ...........
     @Override
     public void yourMethodName(){
      //"here call your fragment method or do any bussiness logic 
      }    
  }

, onclick, ,

public class YourAdapterClass extends BaseAdapter {
  private CallBack mCallBack;
   public YourAdapterClass (CallBack callback){
    mCallBack = callback;
      }
    }

onClickListener ,

    @Override
        public void onClick(View v) {
           mCallBack.yourMethodName();


        }
    });

+9

.

,

public static void SendOrder(String OrderId)
{

    final String serverid = sp.getString("serverid", "null");
    Log.e("TAG", "SendOrder: "+serverid +OrderId );
    new SendOrder().execute(new Config().addNewOrder, serverid, OrderId);
}

,

viewHolder.accept.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                removeListItem(viewHolder.order_card_layout, position);

                 fragmentClassName.Sendorder(data.getorder_id());

            }
        });
+1

.

  autoWitDrawRuleListAdapter = new AutoWithRuleListListAdapter(getContext(), AutoViewRuleFragment.this, lookupData);
                recycleRuleList.setAdapter(autoWitDrawRuleListAdapter);

: -

private Context context;
private Fragment fragment;
private ArrayList<ObjGetLookupDataResponseIn> lookupData;

 public AutoWithRuleListListAdapter(Context context, Fragment fragment, ArrayList<ObjGetLookupDataResponseIn> lookupData) {
    this.context = context;
    this.fragment = fragment;
    this.lookupData = lookupData;

}

@Override
public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
    String output = lookupData.get(position).getDisplayName().substring(0, 1).toUpperCase() + lookupData.get(position).getDisplayName().substring(1);
    holder.radioBen.setText(output);
    holder.radioBen.setOnCheckedChangeListener(null);
    holder.radioBen.setChecked(lookupData.get(position).isSelected());

    holder.radioBen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            resetAll();
            lookupData.get(position).setSelected(true);
            notifyDataSetChanged();
            ((AutoViewRuleFragment)fragment).ruleName(position);
        }
    });


}

.

  public void ruleName(int position) {
    //your logic.
}

, . , . .

+1

,

UserAdapter adapter = new UserAdapter(selectUserModels, getActivity(), FragmentName.this);

, :

 private Context context;
            private Fragment fragment;

     public UserAdapter(List<UserModel> selectUserModels, Context context, Fragment fragment) {
            contactList = selectUserModels;
            this.context = context;
            this.fragment = fragment;
        }

,

((FragmentName) fragment).fragmentMethod();
+1

, .

android.support.v4.app.Fragment newFragment = new NewPageActivity();

.

, , . :

SelectUserAdapter adapter = new SelectUserAdapter(selectUserModels, getActivity(), CurrentFragment.this);
        listView.setAdapter(adapter);

:

public class SelectUserAdapter extends BaseAdapter {

    private List<SelectUserModel> contactList;
    private Context context;
    private Fragment fragment;

    public SelectUserAdapter(List<SelectUserModel> selectUserModels, Context context, Fragment fragment) {
        contactList = selectUserModels;
        this.context = context;
        this.fragment = fragment;
    }

, Fragment, :

((CurrentFragment) fragment).sendorder(data.getorder_id());
0

Include the view context in the parent activity class in the user adapter, and then just call your method. steps: 1. Get the view context in the user adapter and include it in the parent activity. 2. Bringing the context to the fragment class. 3. Use the object method to call the fragment method.

Link Code -

  MainActivity hf = (MainActivity) view.getContext();
            FragmentManager manager = hf.getSupportFragmentManager();
            HomeFragment fragment = (HomeFragment) manager.findFragmentByTag("HomeFragment");
            fragment.loadJSON(true);

Do not create an instance of the fragment.

0
source

Source: https://habr.com/ru/post/1664636/


All Articles