میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

استفاده از fragment ها در اندروید استودیو

با سلام خدمت دوستان عزیز در این مقاله قصد داریم نحوه استفاده از fragment فرگمنت ها در اندروید استودیو را به شما عزیزان آموزش دهیم

به منظور تعریف یک fragment جدید می توانید از کلاس android.app.Fragment و یا یکی از کلاس های فرزند ( )subclass آن ارث بری ( extend ) نمایید. کلاس های فرزندی که می توانید مورد استفاده قرار دهید عبارتند ازPreferenceFragment  DialogFragment ، ListFragment یا WebViewFragment

کد زیر یک نمونه پیاده سازی را نمایش می دهد:

 

package com.example.android.rssreader;
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 DetailFragment extends Fragment {
public static final String EXTRA_URL ="url";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_rssitem_detail,
container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
if (bundle != null) {
String link = bundle.getString("url");
setText(link);
}
}
public void setText(String url) {
TextView view = (TextView) getView().findViewById(R.id.detailsText);
view.setText(url);
}
}

 


تعامل اپلیکیشن با fragment ها

برای اینکه بتوان امکان استفاده ی مجدد از fragment ها را افزایش داد و به اصطلاح آن ها را بازیافت نمود، لازم است هر گونه تعامل بین این fragment ها منحصرا از طریق activity میزبان انجام شود. به بیان دیگر، fragment ها نباید مستقیما و بدون واسطه با یکدیگر ارتباط داشته باشند.

برای این منظور fragment می بایست یک interface را به صورت inner و داخل یک کلاس تعریف کند. fragment ایجاب می کند که activity میزبان، این interface را پیاده سازی کند. بدین وسیله شما اطمینان حاصل می کنید که fragment هیچ اطلاعی از activity میزبان ( activity که از آن fragment استفاده می کند) خود ندارد. Fragment مورد نظر سپس به وسیله ی متد ()onAttach خود بررسی می کند که آیا activity به درستی interface مورد نظر را پیاده سازی می کند یا خیر.

به عنوان مثال، فرض کنید fragment ای دارد که باید مقداری را به activity میزبان ( parent ) خود ارسال کند. این کار را می توان به صورت زیر پیاده سازی نمود.

 

package com.example.android.rssreader;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class MyListFragment extends Fragment {
private OnItemSelectedListener listener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup contain
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_rsslist_overview,
container, false);
Button button = (Button) view.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateDetail("fake");
}
});
return view;
}
public interface OnItemSelectedListener {
public void onRssItemSelected(String link);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnItemSelectedListener) {
listener = (OnItemSelectedListener) context;
} else {
throw new ClassCastException(context.toString()
+ " must implemenet MyListFragment.OnItemSelectedListener");
}
}
@Override
public void onDetach() {
super.onDetach();
listener = null;
}
// may also be triggered from the Activity
public void updateDetail(String uri) {
// create a string just for testing
String newTime = String.valueOf(System.currentTimeMillis());
// inform the Activity about the change based
// interface defintion
listener.onRssItemSelected(newTime);
}
}

 

ارسال پارامتر به fragment ها

Activity می تواند یک bundle را به عنوان پارامتر به fragment ارسال کند.

 

detailFragment = new DetailFragment();
// configure link
Bundle bundle = new Bundle();
bundle.putString("link", link);
detailFragment.setArguments(bundle);

fragment آبجکت bundle را در متد onActivityCreated خود دریافت می کند 

 

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
if (bundle != null) {
setText(bundle.getString("link"));
}
}

 


امیدواریم آموزش استفاده از fragment ها در اندروید استودیو نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟