2011-11-17 14 views
35

मैंने अभी हनीकॉम्ब के लिए खंड डिजाइन के साथ शुरुआत की है। मैंने दो टुकड़े बनाए। जब मैं बाईं तरफ खंड में एक बटन क्लिक करता हूं, तो दाहिने तरफ एक नया टुकड़ा बनाया जाता है। इस बीच जब मैं (सही टुकड़ा में एक बटन पर क्लिक करें यानी। DetialsFragment नीचे मेरी कोड में एक और टुकड़ा द्वारा प्रतिस्थापित किया जाना चाहिए। main.xmlएंड्रॉइड वर्तमान खंड को दूसरे खंड के साथ प्रतिस्थापित करता है

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" > 
    <fragment class="com.fragment.example.Titles" 
     android:id="@+id/titles" android:layout_weight="1" 
     android:layout_width="0px" 
     android:layout_height="match_parent" /> 
    <FrameLayout android:id="@+id/details" android:layout_weight="1" 
     android:layout_width="0px" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

FragmentExample.java

public class FragmentExample extends Activity { 
/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

Titles.java

public class Titles extends Fragment { 
    public FragmentTransaction ft; 
    @Override 
    public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.main1, null); 
     Button button1 = (Button)v.findViewById(R.id.button1); 
     button1.setText("santhosh"); 
     button1.setOnClickListener(new OnClickListener() { 



      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       DetailsFragment details = (DetailsFragment) 
          getFragmentManager().findFragmentById(R.id.details); 
        if (details == null || details.getShownIndex() != 1) { 
         // Make new fragment to show this selection. 
         details = DetailsFragment.newInstance(1); 

         // Execute a transaction, replacing any existing 
         // fragment with this one inside the frame. 
         ft 
           = getFragmentManager().beginTransaction(); 
         ft.add(R.id.details, details, "detail"); 
         ft.setTransition(
           FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
         ft.commit(); 
        } 
      } 

     }); 
     return v; 
    } 
} 

DetailsFragment.java

public class DetailsFragment extends Fragment { 
    /** 
    * Create a new instance of DetailsFragment, initialized to 
    * show the text at 'index'. 
    */ 
    Titles title = new Titles(); 
    String[] titles = {"Title1", "Title2", "Title3", "Title4"}; 
    public static DetailsFragment newInstance(int index) { 
     DetailsFragment f = new DetailsFragment(); 

     // Supply index input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("index", index); 
     f.setArguments(args); 

     return f; 
    } 

    public int getShownIndex() { 
     return getArguments().getInt("index", 0); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState) { 
     if (container == null) { 
      // Currently in a layout without a container, so no 
      // reason to create our view. 
      return null; 
     } 
     Button button = new Button(getActivity()); 
     button.setText("Next"); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
      } 
     }); 
     return button; 
    } 
} 

उत्तर

83

तो प्रदान की अपने बटन दिखाई दे रहा है और क्लिक करें घटना निकाल दिया जा रहा है तो आप अपने क्लिक करें घटना में निम्नलिखित कॉल कर सकते हैं:

final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.details, new NewFragmentToReplace(), "NewFragmentTag"); 
ft.commit(); 

और आप अपने जोड़े सुनिश्चित वापस क्लिक करने पर DetailsFragment के लिए वापस जाना चाहते हैं, तो पिछला लेनदेन बैक स्टैक, यानी

ft.addToBackStack(null); 

या क्या मुझे कुछ याद आ रही है? वैकल्पिक रूप से कुछ लोग सुझाव देते हैं कि आपकी गतिविधि बटन के लिए क्लिक ईवेंट प्राप्त करती है और आपके विवरण फलक में टुकड़ों को बदलने की ज़िम्मेदारी है।

+3

खंड टैग प्रदान करना वैकल्पिक है। आप 'ft.replace (R.id.details, new newFragmentToReplace()) कर सकते हैं;' –

+0

'getFragmentManager()। ExecutePendingTransactions(); ' –

+2

बटन पिछले खंड से दूर नहीं जाते हैं। पुराने टुकड़े के बटन अभी भी नए टुकड़े के शीर्ष पर दिखाई दे रहे हैं। – Santanu

0

आप कोड नीचे आज़मा सकते हैं। पुराने टुकड़े से नए टुकड़े को धक्का देने के लिए यह बहुत आसान तरीका है।

private int mContainerId; 
private FragmentTransaction fragmentTransaction; 
private FragmentManager fragmentManager; 
private final static String TAG = "DashBoardActivity"; 

public void replaceFragment(Fragment fragment, String TAG) { 

    try { 
     fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(mContainerId, fragment, tag); 
     fragmentTransaction.addToBackStack(tag); 
     fragmentTransaction.commitAllowingStateLoss(); 

    } catch (Exception e) { 
     // TODO: handle exception 
    } 

} 
+0

mcontainerid – Ayoub

+0

@Ayoub क्या है आप आईडी देखते हैं .. उदाहरण linearLayout.getId() जावा में – marlonpya

0

उपयोग android.support.v4.app अपने कोड में FragmentManager & FragmentTransaction के लिए, यह मेरे लिए काम किया है।

DetailsFragment detailsFragment = new DetailsFragment(); 
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.details,detailsFragment); 
fragmentTransaction.commit(); 
0

फ्रैगमेंट के साथ प्रतिस्थापित करना बहुत आसान है।

DataFromDb changeActivity = new DataFromDb(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.changeFrg, changeActivity); 
    transaction.commit();