2013-04-16 11 views
10

संपादित करें ::: कृपया नीचे मेरा उत्तर को देखें ...एंड्रॉयड में टुकड़े का उपयोग कैसे करें

प्रश्न :::

मैं बहुत एंड्रॉयड में टुकड़े का उपयोग कर के लिए नया हूँ और मैं पूरी तरह से में गड़बड़ कर रहा हूँ।

मैं केवल एक सरल नमूना अनुप्रयोग बनाने की कोशिश कर रहा हूं जो टुकड़ों का उपयोग करता है। मेरा परिदृश्य है, मेरे पास मेरी मुख्य गतिविधि में दो टुकड़े हैं। पहले खंड में एक संपादन और एक बटन है। दूसरे खंड में एक टेक्स्टव्यू है। जब मैं संपादन में एक नाम दर्ज करता हूं और बटन पर क्लिक करता हूं, तो दूसरे खंड में टेक्स्टव्यू को पहले खंड के संपादन में दर्ज नाम प्रदर्शित करना चाहिए।

मैं टुकड़ों की स्थिर असाइनमेंट (एक्सएमएल में टुकड़े असाइन करना) का उपयोग कर रहा हूं।

कृपया एक्सएमएल फाइल और नीचे दिए गए कोड को देखें ...

activity_main.XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <fragment 
     android:id="@+id/fragment_content_1" 
     android:name="com.example.fragmentexample.fragment_fragment_1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </fragment> 

    <fragment 
     android:id="@+id/fragment_content_2" 
     android:name="com.example.fragmentexample.fragment_fragment_2" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <!-- Preview: [email protected]/fragment_basic --> 
    </fragment> 

</LinearLayout> 

fragment_fragment_1.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="vertical" > 

    <EditText 
     android:id="@+id/edtxtPersonName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="textPersonName" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/btnSayHi" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Say Hi" /> 

</LinearLayout> 

fragment_fragment_2.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="vertical" > 

    <TextView 
     android:id="@+id/txtViewResult" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="I will say Hi" /> 

</LinearLayout> 

जावा फ़ाइलें :::

MainActivity.Java

package com.example.fragmentexample; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

    public class MainActivity extends Activity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.activity_main, menu); 
      return true; 
     } 

    } 

Fragment_1.Java

package com.example.fragmentexample; 

import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class Fragment_1 extends Fragment{ 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub  

     View view = inflater.inflate(R.layout.fragment_fragment_1, container, false); 

     final EditText edtxtPersonName_Fragment = (EditText) view.findViewById(R.id.edtxtPersonName); 
     Button btnSayHi_Fragment = (Button) view.findViewById(R.id.btnSayHi); 

     btnSayHi_Fragment.setOnClickListener(new OnClickListener() { 

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

       String name = edtxtPersonName_Fragment.getText().toString(); 

       FragmentManager fm = getFragmentManager(); 
       Fragment_2 f2 = (Fragment_2) fm.findFragmentById(R.id.fragment_content_2); 

       if(f2 != null && f2.isInLayout()) 
       { 
        f2.setName(name); 
       } 

       Activity activity = getActivity(); 

       if(activity != null) 
       { 
        Toast.makeText(activity, "Say&ing Hi in Progress...", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 

     return view; 


    } 

} 

Fragment_2.Java

package com.example.fragmentexample; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class Fragment_2 extends Fragment{ 

    View view; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 

     view = inflater.inflate(R.layout.fragment_fragment_2, container, false);   
     return view; 
    } 

    public void setName(String name) 
    { 
     TextView txtName = (TextView) view.findViewById(R.id.txtViewResult); 
     txtName.setText("Hi " + name); 
    } 

} 

जब मैं आवेदन चलाने के लिए, वहाँ बहुत हैं अपवादों का .. यहां लॉगकट ट्रेस है ..

04-16 15:06:48.781: E/AndroidRuntime(420): FATAL EXCEPTION: main 
04-16 15:06:48.781: E/AndroidRuntime(420): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fragmentexample/com.example.fragmentexample.MainActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class fragment 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.ActivityThread.access$500(ActivityThread.java:122) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.os.Looper.loop(Looper.java:132) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.ActivityThread.main(ActivityThread.java:4123) 
04-16 15:06:48.781: E/AndroidRuntime(420): at java.lang.reflect.Method.invokeNative(Native Method) 
04-16 15:06:48.781: E/AndroidRuntime(420): at java.lang.reflect.Method.invoke(Method.java:491) 
04-16 15:06:48.781: E/AndroidRuntime(420): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
04-16 15:06:48.781: E/AndroidRuntime(420): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
04-16 15:06:48.781: E/AndroidRuntime(420): at dalvik.system.NativeStart.main(Native Method) 
04-16 15:06:48.781: E/AndroidRuntime(420): Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class fragment 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.view.LayoutInflater.rInflate(LayoutInflater.java:724) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.view.LayoutInflater.inflate(LayoutInflater.java:479) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.view.LayoutInflater.inflate(LayoutInflater.java:391) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.view.LayoutInflater.inflate(LayoutInflater.java:347) 
04-16 15:06:48.781: E/AndroidRuntime(420): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:223) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.Activity.setContentView(Activity.java:1786) 
04-16 15:06:48.781: E/AndroidRuntime(420): at com.example.fragmentexample.MainActivity.onCreate(MainActivity.java:12) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.Activity.performCreate(Activity.java:4397) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779) 
04-16 15:06:48.781: E/AndroidRuntime(420): ... 11 more 
04-16 15:06:48.781: E/AndroidRuntime(420): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.fragmentexample.fragment_fragment_1: make sure class name exists, is public, and has an empty constructor that is public 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.Fragment.instantiate(Fragment.java:567) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.Fragment.instantiate(Fragment.java:535) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.Activity.onCreateView(Activity.java:4168) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664) 
04-16 15:06:48.781: E/AndroidRuntime(420): ... 21 more 
04-16 15:06:48.781: E/AndroidRuntime(420): Caused by: java.lang.ClassNotFoundException: com.example.fragmentexample.fragment_fragment_1 in loader dalvik.system.PathClassLoader[/data/app/com.example.fragmentexample-1.apk] 
04-16 15:06:48.781: E/AndroidRuntime(420): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:251) 
04-16 15:06:48.781: E/AndroidRuntime(420): at java.lang.ClassLoader.loadClass(ClassLoader.java:540) 
04-16 15:06:48.781: E/AndroidRuntime(420): at java.lang.ClassLoader.loadClass(ClassLoader.java:500) 
04-16 15:06:48.781: E/AndroidRuntime(420): at android.app.Fragment.instantiate(Fragment.java:557) 
04-16 15:06:48.781: E/AndroidRuntime(420): ... 24 more 

मैंने उदाहरणों को देखा है कि इसे कैसे किया जाए, लेकिन इसे समझ नहीं सका। कृपया उन क्षेत्रों को इंगित करें जहां मैं इसे गलत कर रहा हूं, और कृपया इसे करने का सही तरीका भी पोस्ट करें।

धन्यवाद आपके समय के लिए एक बहुत ...

संपादित करें :::

मैं MainActivity.java बदल दिया है गतिविधि के बजाय FragmentActivity विस्तार करने के लिए और भी एंड्रॉयड बदल दिया है: activity_main में नाम मान। एक्सएमएल जावा फ़ाइलें बजाय टुकड़े की ओर इंगित करने के ...

मैं निम्नलिखित अपवादों :::

04-16 15:29:43.821: E/AndroidRuntime(563): FATAL EXCEPTION: main 
04-16 15:29:43.821: E/AndroidRuntime(563): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fragmentexample/com.example.fragmentexample.MainActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class fragment 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.ActivityThread.access$500(ActivityThread.java:122) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.os.Looper.loop(Looper.java:132) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.ActivityThread.main(ActivityThread.java:4123) 
04-16 15:29:43.821: E/AndroidRuntime(563): at java.lang.reflect.Method.invokeNative(Native Method) 
04-16 15:29:43.821: E/AndroidRuntime(563): at java.lang.reflect.Method.invoke(Method.java:491) 
04-16 15:29:43.821: E/AndroidRuntime(563): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
04-16 15:29:43.821: E/AndroidRuntime(563): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
04-16 15:29:43.821: E/AndroidRuntime(563): at dalvik.system.NativeStart.main(Native Method) 
04-16 15:29:43.821: E/AndroidRuntime(563): Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class fragment 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.view.LayoutInflater.rInflate(LayoutInflater.java:724) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.view.LayoutInflater.inflate(LayoutInflater.java:479) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.view.LayoutInflater.inflate(LayoutInflater.java:391) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.view.LayoutInflater.inflate(LayoutInflater.java:347) 
04-16 15:29:43.821: E/AndroidRuntime(563): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:223) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.Activity.setContentView(Activity.java:1786) 
04-16 15:29:43.821: E/AndroidRuntime(563): at com.example.fragmentexample.MainActivity.onCreate(MainActivity.java:13) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.Activity.performCreate(Activity.java:4397) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779) 
04-16 15:29:43.821: E/AndroidRuntime(563): ... 11 more 
04-16 15:29:43.821: E/AndroidRuntime(563): Caused by: java.lang.ClassCastException: com.example.fragmentexample.Fragment_1 cannot be cast to android.support.v4.app.Fragment 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.support.v4.app.Fragment.instantiate(Fragment.java:394) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.support.v4.app.Fragment.instantiate(Fragment.java:369) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272) 
04-16 15:29:43.821: E/AndroidRuntime(563): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:660) 
04-16 15:29:43.821: E/AndroidRuntime(563): ... 21 more 

यहाँ बदल एक्सएमएल Fil है गतिविधि_माइन का ई।एक्सएमएल

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <fragment 
     android:id="@+id/fragment_content_1" 
     android:name="com.example.fragmentexample.Fragment_1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </fragment> 

    <fragment 
     android:id="@+id/fragment_content_2" 
     android:name="com.example.fragmentexample.Fragment_2" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <!-- Preview: [email protected]/fragment_basic --> 
    </fragment> 

</LinearLayout> 
+0

http://www.vogella.com/articles /AndroidFragments/article.html http://developer.android.com/training/basics/fragments/creating.html – Triode

+0

देखें [यहां] (http://v4all123.blogspot.com/2013/07/simple-fragments-tutorial.html)। – Gunaseelan

उत्तर

11

Okie ... अंत में एक समाधान मिल गया। शायद, यह एक बदलाव का ज्यादा नहीं था।

चेक बाहर नीचे कोड ...

activity_main.XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <fragment 
     android:id="@+id/fragment_content_1" 
     android:name="com.example.fragmentexample.Fragment_1" 
     android:layout_width="0dip" 
     android:layout_weight="0.50" 
     android:layout_height="fill_parent" > 
    </fragment> 

    <fragment 
     android:id="@+id/fragment_content_2" 
     android:name="com.example.fragmentexample.Fragment_2" 
     android:layout_width="0dip" 
     android:layout_weight="0.50" 
     android:layout_height="fill_parent" > 

     <!-- Preview: [email protected]/fragment_basic --> 
    </fragment> 

</LinearLayout> 

fragment_fragment_1 और fragment_fragment_2 के लेआउट ही रहते हैं।

Fragment_1.Java

package com.example.fragmentexample; 

import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class Fragment_1 extends Fragment{ 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      // TODO Auto-generated method stub  

      View view = inflater.inflate(R.layout.fragment_fragment_1, container, false); 

      final EditText edtxtPersonName_Fragment = (EditText) view.findViewById(R.id.edtxtPersonName); 
      Button btnSayHi_Fragment = (Button) view.findViewById(R.id.btnSayHi); 

      btnSayHi_Fragment.setOnClickListener(new OnClickListener() { 

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

        String name = edtxtPersonName_Fragment.getText().toString(); 

        FragmentManager fm = getFragmentManager(); 
        Fragment_2 f2 = (Fragment_2) fm.findFragmentById(R.id.fragment_content_2); 

        if(f2 != null && f2.isInLayout()) 
        { 
         f2.setName(name); 
        } 

        Activity activity = getActivity(); 

        if(activity != null) 
        { 
         Toast.makeText(activity, "Say&ing Hi in Progress...", Toast.LENGTH_LONG).show(); 
        } 
       } 
      }); 

      return view; 


     } 

    } 

Fragment_2.Java

package com.example.fragmentexample; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class Fragment_2 extends Fragment{ 

    View view; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 

     view = inflater.inflate(R.layout.fragment_fragment_2, container, false);   
     return view; 
    } 

    public void setName(String name) 
    { 
     TextView txtName = (TextView) view.findViewById(R.id.txtViewResult); 
     txtName.setText("Hi " + name); 
    } 

} 

का स्क्रीनशॉट है ...

enter image description here

+1

लेकिन तत्व 'खंड' तत्व 'खाली टैग' नहीं है? इसके अलावा मुझे आश्चर्य है कि यह आपके मामले में कैसे काम करता है, मैंने बस अपना पूरा कोड कॉपी किया है और मुझे अभी भी उन त्रुटियां मिल रही हैं। – mr5

+0

मैं टुकड़े की परिभाषा के बारे में थोड़ा उलझन में हूँ? यहां तक ​​कि मुख्य साइट http://developer.android.com/guide/components/fragments.htmlreading से भी पढ़ना मुझे फ्रैगमेंट के बारे में कुछ भी समझ में नहीं आया है क्या आप कृपया एक बहुत ही सरल तरीके से परिभाषित कर सकते हैं कि टुकड़े क्या हैं? –

1

आप अपने टुकड़े करने के लिए एक खाली सार्वजनिक निर्माता को जोड़ने के लिए, जैसे कि यह स्टैक ट्रेस में कहते हैं की जरूरत है:

public class Fragment_2 extends Fragment{ 

    public Frament_2() { 
     //BLAH! 
    } 

    // The rest of your code 

} 
+0

मैंने कन्स्ट्रक्टर जोड़ा। अपवाद में कोई बदलाव नहीं ... मुझे कन्स्ट्रक्टर –

+0

जोड़ने के लिए एक ही अपवाद मिलता है .. मैंने अभी कुछ देखा है, क्या आपको टुकड़े दिखाने के लिए FragmentActivity बढ़ाने की आवश्यकता नहीं है? – Cornholio

+0

इसे फ्रैगमेंट एक्टिविटी में बदल दिया गया, प्रश्न अपडेट किया गया, कृपया एक नज़र डालें –

0

के रूप में इस प्रकार अपने activity_main.XML संपादित करें।

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

<fragment 
    android:id="@+id/fragment_content_1" 
    android:name="com.example.fragmentexample.fragment_fragment_1" 
    class="com.example.fragmentexample.fragment_fragment_1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
</fragment> 

<fragment 
    android:id="@+id/fragment_content_2" 
    android:name="com.example.fragmentexample.fragment_fragment_2" 
    class="com.example.fragmentexample.fragment_fragment_2" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <!-- Preview: [email protected]/fragment_basic --> 
</fragment> 
</LinearLayout> 
संबंधित मुद्दे