DÜZENLEMEYİ Fragments nasıl kullanılır ::: ... aşağıda benim cevabını bakınAndroid'de
Soru :::
Ben Android'de Fragments kullanmaya çok yeni ve tamamen berbat ediyorum.
Sadece Fragments kullanan basit bir örnek uygulama oluşturmaya çalışıyorum. Benim senaryoda, ana faaliyetimde iki parçam var. İlk parçanın bir edittext ve bir düğmesi vardır. İkinci bölümün bir metin görüşü vardır. Edittext içine bir isim girdiğimde ve butona tıkladığımda, ikinci fragmandaki metin görünümü, ilk fragmanın edittextinde girilen ismi göstermelidir.
Parçaların statik atamasını kullanıyorum (XML'de parça atayarak).
activity_main.XML ... XML dosyaları ve aşağıdaki Kanunu bakınız
<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>
Java Dosyalar :::
MainActivity.Java Uygulamayı çalıştırdığınızda
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);
}
}
, sürü vardır istisnalar .. İşte logcat iz ..
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
Nasıl yapılacağına dair örnekler gördüm, ancak bunu anlayamadım. Lütfen yanlış yaptığım bölgeleri işaretleyin ve lütfen doğru yolu yazınız.
teşekkürler kez bir sürü ...
DÜZENLEME ::: yerine Faaliyet FragmentActivity uzatmak MainActivity.java değişti ve ayrıca android değişti
: activity_main ad değerlerini. xml ... Java Files yerine parçaların için
işaret etmek alıyorum aşağıdaki istisnalar :::
İşte04-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
değişti XML Fil olduğunu activity_main alanının e.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="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>
http://www.vogella.com/articles ScreenShot olduğunu /AndroidFragments/article.html http://developer.android.com/training/basics/fragments/creating.html – Triode
Bkz. [Burada] (http://v4all123.blogspot.com/2013/07/simple-fragments-tutorial.html). – Gunaseelan