How to call a fragment from Android BaseAdapter Class?

I want to call Fragement from my BaseAdapter class. In this class, I have a button whose click I want to call a new fragment, but I can’t get it. I need to pass values ​​from the click of a button to a fragment.

Baseadapter class

public class StatusAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater = null;
    public StatusAdapter(Activity a,
            ArrayList<HashMap<String, String>> d) {
        activity = a;
        data = d;
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.approval_selftrip_inner, null);
        TextView approved_by = (TextView) vi.findViewById(R.id.approved_by);
        TextView status = (TextView) vi.findViewById(R.id.status);
        TextView trip = (TextView) vi.findViewById(R.id.trip);
        Button view_log = (Button)vi.findViewById(R.id.view_log);

        HashMap<String, String> list = new HashMap<String, String>();
        list = data.get(position);
        approved_by.setText(list.get("first_id"));
        status.setText(list.get("status"));
        trip.setText(list.get("trip"));
        view_log.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                //Here i want to call my fragment 

            }
        });
        return vi;
    }
}

Fragment

public class Log extends Fragment {
    Context context ;
    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        context = getActivity();

        rootView = inflater.inflate(R.layout.activity_log,
                container, false);
        return rootView;
    }


}

I want to call this fragment from the BaseAdapter class when clicked view_log. Please help me how can we do this

After Martin Cazares I did it

In Activity

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    context = getActivity();
        rootView = inflater.inflate(R.layout.activity_main,
                container, false);
        mBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Toast.makeText(context, "Recived", 
                           Toast.LENGTH_LONG).show();
                ApprovalLog fragment2 = new ApprovalLog();
                FragmentManager fragmentManager = getFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager
                        .beginTransaction();
                fragmentTransaction.replace(R.id.content_frame, fragment2);
                fragmentTransaction.commit();
            }
        };
        return rootView;
    } 

In adapterclass

view_approvallog.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                CommonUtils.showAlert("Test in Adapter", activity);
                activity.registerReceiver(mBroadcastReceiver, new IntentFilter(
                        "start.fragment.action"));

            }
        });
+4
source share
5 answers

Just use it.

public void onClick(View view) {
 LogFrag fragment2 = new LogFrag();
 FragmentManager fragmentManager = getFragmentManager();
 FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
 fragmentTransaction.replace(R.id.fragment1, fragment2);
 fragmentTransaction.commit();
}
+2
source

, BaseAdapter, - , , - , , , , , , , , , , .

android - , :

 view_log.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            //Here i want to call my fragment
            //You need to pass a reference of the context to your adapter...
            context.sendBroadcast(new Intent("start.fragment.action"))

        }
    });

, , BroadcastReceiver "start.fragment.action" :

//In your activity...
context.registerReceiver(mBroadcastReceiver, new IntentFilter("start.fragment.action"))
.
.
.   
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
                    //This piece of code will be executed when you click on your item
            // Call your fragment...
        }
    };

, , , ...

: LocalBroadcastManager .

!

+15

((Activity) mContext).getFragmentManager();//use this

view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fragment fragment = new CallThisFragment();
            FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager();
            fragmentManager.beginTransaction().replace(R.id.main_activity, fragment).commit();
        }
    });    
+9

:

Adapter a = new Adapter(arg,Fragment.this);// or only this. This will pass the fragment object to the adapter.

v.ckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


            if(fragment!=null)
                fragment.ValidateList();// call any public method of the fragment
            }
        });
0

Great way to call a snippet from a custom base adapter

fragmentManager.beginTransaction()
        .add(R.id.content_frame, new YourFragmentName())
        .addToBackStack("fragBack")).commit();
((Activity) context).setTitle("Title For Action Bar");`
-2
source

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


All Articles