0

I have four fragments (in two packages) and its corresponding four xml files. I have set three of them accordingly to tabselect. One fragement (ComapreFrag.java) has an ImagineView button. When I press on it, I want to show a new Fragment (CreditCards.java). How can I do this? Find below the code I used.

MainActivity.java

 import android.support.v4.app.Fragment;

package com.example.swipetabs;

import com.tabs.*;

import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.widget.ImageView;
import com.comparenow.*;
import android.support.v4.app.FragmentManager;

public class MainActivity extends FragmentActivity implements TabListener {

    ActionBar action_bar;
    ViewPager viewPager;
    ImageView creditCards;
    
    CreditCards credit_cards;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //
        credit_cards =new CreditCards();
        
        Bundle args=new Bundle();
        
        viewPager=(ViewPager)findViewById(R.id.pager);
        //intialise fragement
        
    
        viewPager.setAdapter(new MyAdoptor(getSupportFragmentManager()));
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            
            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                action_bar.setSelectedNavigationItem(arg0);
                
            }
            
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub
                
            }
        });
        
        action_bar=getActionBar();
        //action_bar.setBackgroundDrawable(d)
        action_bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        
        ActionBar.Tab tab1=action_bar.newTab();
        tab1.setText("Login");
        
        tab1.setTabListener(this);
        
        ActionBar.Tab tab2=action_bar.newTab();
        tab2.setText("Compare Now");
        tab2.setTabListener(this);
        
        ActionBar.Tab tab3=action_bar.newTab();
        tab3.setText("Search");
        tab3.setTabListener(this);
        
        action_bar.addTab(tab1);
        action_bar.addTab(tab2);
        action_bar.addTab(tab3);
        
        CreditCards cards=new CreditCards();
        
        cards.setArguments(args);
        
        
    }
    
    public void switchToFragmentB(){
           FragmentTransaction fm=getSupportFragmentManager().beginTransaction();     
           fm.replace(R.id.tabcontent, new Myprofile());        
           fm.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
           fm.addToBackStack(null);
           fm.commit();
        
        
     }

    @Override
    public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        viewPager.setCurrentItem(tab.getPosition());
        
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        
        
    }

    
}


class MyAdoptor extends FragmentPagerAdapter
{

    public MyAdoptor(FragmentManager fm) {
        super(fm);
                // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        
        Fragment fragement=null;
        if(arg0==0)
        {
            fragement=new Loginfrag();
        }
        if(arg0==1)
        {
            fragement=new Comparefrag();
        }
        if(arg0==2)
        {
            fragement=new Searchfrag();
        }
        
        
        
        System.out.print("<><><><>");
        return fragement;
    
    }

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

Comparefrag.java (this is fragement here i used a imageView to call a new fragement-i have new fragement & it's been initiated in MainActivity.java )

       package com.tabs;

import com.comparenow.CreditCards;
import com.example.swipetabs.MainActivity;
import com.example.swipetabs.R;
import com.example.swipetabs.R.layout;

import android.support.v4.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;



/**
 * A simple {@link android.support.v4.app.Fragment} subclass.
 * 
 */
public class Comparefrag extends Fragment implements View.OnClickListener {

    public Comparefrag() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.comparenow_b, container, false);
        ImageView btnT = (ImageView)v.findViewById(R.id.imageView2);
        btnT.setOnClickListener(this);
        return v;
    }
    
public void onClick(View v) {
    
    // FragmentTransaction fm=((MainActivity)getActivity()).getSupportFragmentManager().beginTransaction();
     FragmentTransaction fm=getActivity().getSupportFragmentManager().beginTransaction();
     CreditCards aFrag = new CreditCards(); 
     fm.replace(android.R.id.tabcontent, aFrag);
     fm.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
     fm.commit();
        
        System.out.print(">>>>>>>>>>>>");
         
         /*When I click this button in my fragment, I'd like it to go to fragment B for example*/
    //  ((MainActivity)getActivity()).switchToFragmentB();
           
        
    }

}

CreditCards.java

package com.comparenow;

import com.example.swipetabs.R;
import com.example.swipetabs.R.layout;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * A simple {@link android.support.v4.app.Fragment} subclass.
 * 
 */
public class CreditCards extends Fragment {

    public CreditCards() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        
        return inflater.inflate(R.layout.creditcards_c, container, false);
        
        
    }

}
   

Error:log cat

02-05 17:10:59.163: E/AndroidRuntime(30400): FATAL EXCEPTION: main
02-05 17:10:59.163: E/AndroidRuntime(30400): java.lang.IllegalArgumentException: No view found for id 0x1020011 (android:id/tabcontent) for fragment CreditCards{418f6838 #3 id=0x1020011}
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.os.Handler.handleCallback(Handler.java:605)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.os.Looper.loop(Looper.java:137)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at android.app.ActivityThread.main(ActivityThread.java:4511)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at java.lang.reflect.Method.invokeNative(Native Method)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at java.lang.reflect.Method.invoke(Method.java:511)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
02-05 17:10:59.163: E/AndroidRuntime(30400):    at dalvik.system.NativeStart.main(Native Method)
marli
  • 529
  • 10
  • 19
VenushkaT
  • 1,152
  • 2
  • 19
  • 42
  • use this FragmentTransaction fm=getActivity().getSupportFragmentManager().beginTransaction(); – Palak Feb 05 '14 at 11:08
  • @Palak i have tried this way FragmentTransaction fm=((MainActivity)getActivity()).getSupportFragmentManager().beginTransaction(); but im getting Error as ype mismatch: cannot convert from android.support.v4.app.FragmentTransaction to android.app.FragmentTransaction – VenushkaT Feb 05 '14 at 11:14
  • import android.app.FragmentTransaction;n replace this with import android.support.v4.app.FragmentTransaction; – Palak Feb 05 '14 at 11:18
  • @Palak yap it works The method getSupportFragmentManager() is undefined for the type Comparefrag it couldnt initiate. could you tell me any idea ? please – VenushkaT Feb 05 '14 at 11:21
  • just write getActivity()).getSupportFragmentManager().beginTransaction(); Remove type casting – Palak Feb 05 '14 at 11:27
  • @Palak i want to redirect to Creditcards.java fragement please help me. – VenushkaT Feb 05 '14 at 11:33
  • See i have used this code when i click on listview it replace that fragment with another fragment. FragmentTransaction fm=getActivity().getSupportFragmentManager().beginTransaction(); SignIn aFrag = new SignIn(); fm.replace(android.R.id.tabcontent, aFrag); fm.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); fm.commit();Which works for me. i don't know what is going wrong with you – Palak Feb 05 '14 at 11:37
  • @Palak it didnt redirect me to CreditCards.java class.Im getting Errors in logcat – VenushkaT Feb 05 '14 at 11:49
  • what is trhat error? have u replace this( fm.replace(R.id.d, new frrg()); ) with ur correct class name and layout id? – Palak Feb 05 '14 at 11:55
  • @Palak i have already imported import android.support.v4.app.Fragment; in my Creditcards.java class.and i have posted my class.thank you – VenushkaT Feb 05 '14 at 11:58
  • @Palak i have posted my logcat now.thank you. – VenushkaT Feb 05 '14 at 12:02
  • check out this link http://stackoverflow.com/questions/6556746/android-1-6-fragment-tabhost – Palak Feb 05 '14 at 12:20
  • @Palak thank you very much.your really help me.last time i used to tab host and now im on it. – VenushkaT Feb 05 '14 at 16:41

2 Answers2

2

Try This in click event

   FragmentTransaction fm=getSupportFragmentManager().beginTransaction();     
   fm.replace(R.id.tabcontent, new Myprofile());        
   fm.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
   fm.addToBackStack(null);
   fm.commit();
David
  • 15,894
  • 22
  • 55
  • 66
Palak
  • 574
  • 2
  • 10
1

Check out my demo code


package com.tabs;

import com.comparenow.CreditCards;
import com.example.swipetabs.MainActivity;
import com.example.swipetabs.R;
import com.example.swipetabs.R.layout;

import android.support.v4.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;



/**
 * A simple {@link android.support.v4.app.Fragment} subclass.
 * 
 */
public class Comparefrag extends Fragment implements View.OnClickListener {

    public Comparefrag() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.comparenow_b, container, false);
        ImageView btnT = (ImageView)v.findViewById(R.id.imageView2);
        btnT.setOnClickListener(this);
        return v;
    }

public void onClick(View v) {

    // FragmentTransaction fm=((MainActivity)getActivity()).getSupportFragmentManager().beginTransaction();
     FragmentTransaction fm=getActivity().getSupportFragmentManager().beginTransaction();
     CreditCards aFrag = new CreditCards(); 
     fm.replace(android.R.id.tabcontent, aFrag);
     fm.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
     fm.commit();

        System.out.print(">>>>>>>>>>>>");

         /*When I click this button in my fragment, I'd like it to go to fragment B for example*/
    //  ((MainActivity)getActivity()).switchToFragmentB();


    }

}
Lavanya
  • 3,903
  • 6
  • 31
  • 57
Palak
  • 574
  • 2
  • 10
  • please find my new Edited code there im getting new Error couldnt intialise getSupportFragmentManager() of FragmentTransaction fm=getSupportFragmentManager().beginTransaction(); ( Comparefrag.java) – VenushkaT Feb 05 '14 at 10:55