I am using https://github.com/gabrielemariotti/cardslib for implementing cards within a fragment. when I click a card, it should replace the fragment that contains it and load another fragment, is this possible?

public class MyCard extends Card {


/**
 * Constructor with a custom inner layout
 *
 * @param context
 */
public MyCard(Context context) {
    this(context, R.layout.card_layout);
}

/**
 * @param context
 * @param innerLayout
 */
public MyCard(Context context, int innerLayout) {
    super(context, innerLayout);
    init();
}

/**
 * Init
 */
private void init() {

    //No Header


    //Set a OnClickListener listener
    setOnClickListener(new OnCardClickListener() {
        @Override
        public void onClick(Card card, View view) {
            Toast.makeText(getContext(), "Click Listener card=", Toast.LENGTH_LONG).show();

 //Here




        }
    });
}

At Here, I would like to call FragmentManager and replace the whole Fragment with another one, I think it should be done within the activity but how? P.S. The structure is Activity holds fragments which holds cards.

有帮助吗?

解决方案

Here is the Answer: I get an instance of the MainActivity through the constructor.

public MyCard(Context context, int innerLayout) {
    super(context, innerLayout);
    mActivity=((MainActivity)context);
    init();
}
private void init() {

    //Set a OnClickListener listener
    setOnClickListener(new OnCardClickListener() {
        @Override
        public void onClick(Card card, View view) {
            Toast.makeText(getContext(), "Click Listener card=", Toast.LENGTH_LONG).show();
            baseFragment = new ElderCallStatusFragment();

            mActivity.openFragment(baseFragment);
        }
    });
}

I called the method in the MainActivity to do Fragment Transaction:

 public void openFragment(BaseFragment baseFragment){
    if (baseFragment != null){
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_main, baseFragment);
        ft.commit();
        if (baseFragment.getTitleResourceId()>0)
            mCurrentTitle = baseFragment.getTitleResourceId();
    }
}

Then it works fine.

其他提示

You can attach onClickListener to the CardView, there is no need to extend basic Card class, I believe. At this onClickListener just get a FragmentManager via getActivity:

cardView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        FragmentManager fragmentManager = getActivity().getFragmentManager();
        fragmentManager.beginTransaction()
                       .//do stuff
    }
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top