بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
ظاهر شدن یک صفحه خالی به جای فرگمنت
مدیریت گفتگو
آخرین تغییر: 10 سال پیش
سلام دوستان من 3 آموزش ایجاد فرگمنت انجام دادم که هر 3 بار به جای فرگمنت یک صفحه کاملا خالی و سفید نمایش میده
علتش چی می تونه باشه دوستان ؟
لایه مربوط به فرگمنت
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F7F7F7"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:src="@drawable/ax2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView" />
<Button
android:text="Click Me penguan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnSimpleFragPenguan"
android:layout_alignParentBottom="false"
android:background="#6ddd"
android:layout_centerInParent="true" />
</RelativeLayout>
لایه اکتیویتی که فرگمنت داخلش باید نمایش داده بشه
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center"
android:background="#282B2E"
android:id="@+id/container">
</LinearLayout>
کلاس فرگمنت
public class SimpleFragmentActivity extends EnhancedActivity {
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_simple_fragment);
if (savedInstanceState==null){
getSupportFragmentManager().beginTransaction().add(R.id.container,new PlaceholderFragment()).commit();
}
}
public static class PlaceholderFragment extends Fragment{
public PlaceholderFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_simple,container,false);
Button btnClickPenguan = (Button) rootView.findViewById(R.id.btnSimpleFragPenguan);
btnClickPenguan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(),"You Click ME ",Toast.LENGTH_LONG).show();
}
});
return rootView;
}
}
}
کلاس و لایه اصلی
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center"
android:background="#282B2E"
android:id="@+id/container">
<Button
android:text="Simple Fragment"
android:layout_width="match_parent"
android:layout_height="35dp"
android:id="@+id/btnSimpleFragment"
android:background="@drawable/gray_button"
android:textStyle="bold"
android:textSize="15sp"
android:textColor="#fff"
android:layout_marginBottom="30dp"
android:onClick="simple" />
</LinearLayout>
----------------------------------------
public class MainActivity extends EnhancedActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void simple(View v){
Intent intent= new Intent(getApplicationContext(), SimpleFragmentActivity.class);
startActivity(intent);
}
}
پاسخها 3
مشاهده پاسخ صحیحکلاس SimpleFragmentActivity رو باید از FragmentActivity اکستندز کنید.
نظرات
انجام دادم مشکل حل نشد !
توی اکتیویتیت یک framlayout بذار بهش آی دی بده و فرگمنتت رو با اون replace کن.فریم لایوت رو داخل لایه اصلیت بذار
این لینک رو هم ببین. من از این لینک فرگمنت رو یاد گرفتم و هیچ مشکلی هم ندارم.
دوستان مرسی از لطفتون
Nin عزیز لینکی که معرفی کردی خیلی مفید بود ، متشکرم
پاسخ صحیح
طبق این آموزش پیش برو
این لایه اصلی هست activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center"
android:background="#282B2E">
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
توی ActivityMain.java هم از این کد استفاده کن (حتما از کلاس Fragment v4 استفاده کن)
Fragment fragment = new YourFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.addToBackStack(null)
.commit();
fragmentManager.executePendingTransactions();
حالا میتونی بجای YourFragment از فرگمنت خودت استفاده کنی مثل این
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class YourFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.your_fragment_layout, container,false);
}
}
نظرات
یاسر جان تشکر از پاسختون ، میشه علت اینکه باید حتما از Fragment v4 استفاده کنیم بگید ؟ واسم سوال شده چون الان با این کار نمی کنم اما خیلی تمیز داره کار میکنه البته مجبور شدم بخاطر متد getFragmentManager
این متد getFragmentManager اینو Fragment v4 نمیشناسه
اجباری برای استفاده از Fragment v4 نیست.
اما توی بعضی شرایط خاص نیاز به Fragment v4 دارید که اگه براتون پیش نیومده نیازی نیست استفاده کنید
برای هر فایل xml که به عنوان یک page در نظر دارین باید یک کلاس اختصاصی داشنه باشن که از فرگمنت اکستنز بشه.
توی tabها و منوهای اسلایدی بکار میبرن.
نظرات
ممنونم از پاسختون
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات