Mukesh Prajapati
Mukesh Prajapati

Reputation: 21

How to call getSupportFragmentManager() in ArrayAdapter

Unable to call getSupportFragmentManager() from CustomAdapter & setArguments(bundle) in this code and use it in another fragment. I'm not able to resolve these two methods in my code. How do I call these methods. Kindly somebody try to help me

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;

public class CustomGridViewAdapter extends ArrayAdapter<CategoryPost> {
    private Context context;
    private int layoutResourceId;
    private ArrayList<CategoryPost> data = new ArrayList<CategoryPost>();
    private Fragment getquoteFrag;

    public CustomGridViewAdapter(Context context, int resource, ArrayList<CategoryPost> objects) {
        super(context, resource, objects);
        this.layoutResourceId = resource;
        this.context = context;
        this.data = objects;
    }

    static class ViewHolder {
        TextView success, message, id, name;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null){
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(layoutResourceId, parent, false);
            holder.id = (TextView)convertView.findViewById(R.id.tv_data_id);
            holder.name = (TextView)convertView.findViewById(R.id.tv_name_id);
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }
        final CategoryPost post = data.get(position);
        holder.name.setText(post.getName());
        holder.name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle = new Bundle();
                getquoteFrag = new GetQuoteFragment();
                FragmentManager quote_fm = getSupportFragmentManager().beginTransaction();;
                FragmentTransaction quote_ft = quote_fm.beginTransaction();
                bundle.putString("pos", String.valueOf(post.getId()));
                quote_fm.setArguments(bundle);
            }
        });
        return convertView;
    }
}

Upvotes: 1

Views: 3006

Answers (2)

Mavya Soni
Mavya Soni

Reputation: 972

Try below code :

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class CustomGridViewAdapter extends ArrayAdapter<CategoryPost> {
    private Context context;
    private int layoutResourceId;
    private ArrayList<CategoryPost> data = new ArrayList<CategoryPost>();
    private Fragment getquoteFrag;
    public CustomGridViewAdapter(Context context, int resource, ArrayList<CategoryPost> objects) {
        super(context, resource, objects);
        this.layoutResourceId = resource;
        this.context = context;
        this.data = objects;
    }
    static class ViewHolder
    {
        TextView success, message, id, name;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null){
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(layoutResourceId, parent, false);
            holder.id = (TextView)convertView.findViewById(R.id.tv_data_id);
            holder.name = (TextView)convertView.findViewById(R.id.tv_name_id);
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }
        final CategoryPost post = data.get(position);
        holder.name.setText(post.getName());
        holder.name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle = new Bundle();
                getquoteFrag = new GetQuoteFragment();
                FragmentManager quote_fm = ((MainActivity)context).getSupportFragmentManager().beginTransaction();;
                FragmentTransaction quote_ft = quote_fm.beginTransaction();
                bundle.putString("pos", String.valueOf(post.getId()));
                getquoteFrag.setArguments(bundle);
                quote_ft.replace(R.id.container,getquoteFrag)
                quote_ft.commit();

            }
        });
        return convertView;
    }
}

Upvotes: 6

Ankush Bist
Ankush Bist

Reputation: 1884

call something like this

FragmentManager quote_fm = context.getSupportFragmentManager().beginTransaction();

or

FragmentManager quote_fm = ((MainActivity)context).getSupportFragmentManager().beginTransaction();

to start fragment required code is

            Bundle bundle = new Bundle();
            getquoteFrag = new GetQuoteFragment();
            FragmentManager quote_fm = ((MainActivity)context).getSupportFragmentManager().beginTransaction();;
            FragmentTransaction quote_ft = quote_fm.beginTransaction();
            bundle.putString("pos", String.valueOf(post.getId()));  // you can also send this value as an integer type
            getquoteFrag.setArguments(bundle);
            quote_ft.replace(R.id.your_main_activity_container, getquoteFrag)
            quote_ft.commit();

for below asked quetion to get values in another fragment while calling it.

  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        String post_id= getArguments().getString("pos");

       // you can also pass values in int type.
       int pos = getArguments().getInt("pos"); 
    }
}

Upvotes: 0

Related Questions