در قسمت هفدهم آموزش برنامه نویسی اندروید در ادامه مبحث فرگمنت ها , مبحث تعامل بین فرگمنت ها را که یکی از مهم ترین ویژگی های فرگمنت ها میباشد را به همراه مثالی آموزش داده ایم.
بیشتر اوقات یک اکتیویتی شامل یک یا چند فرگمنت است تا با یکدیگر ارتباط برقرار کرده و تعامل داشته باشند.تعامل بین اکتیویتی ها بسیار حایز اهمیت است برای مثال ما فرگمنتی حاوی چندین آیتم داریم و زمانی که کاربر یکی از آیتم هارا انتخاب کند جزییات آن در فرگمنت دیگر نمایش داده میشود.
مثال زیر به طور کامل نمایش میدهدکه چگونه میتوان به ابزار نمایش درون یک فرگمنت دیگر دسترسی پیدا کرد.
میتوان از همان پروژه ای که در آموزش قبل توضیح داده شد استفاده کرد یا پروژه جدیدی ایجاد کرد.سپس در قسمت fragment1.xml کدهای فوق را اضافه میکنیم
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00FF00" > <TextView android:id="@+id/lblFragment1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is fragment #1" android:textColor="#000000" android:textSize="25sp" /> </LinearLayout>
و عبارات فوق را به بخش fragment2.xml اضافه میکنیم
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFE00" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is fragment #2" android:textColor="#000000" android:textSize="25sp" /> <Button android:id="@+id/btnGetText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Get text in Fragment #1" android:textColor="#000000" android:onClick="onClick" /> </LinearLayout>
و دو فرگمنت را طبق کدنویسی زیر به قسمت 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="horizontal" > <fragment android:name="net.learn2develop.Fragments.Fragment1" android:id="@+id/fragment1" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <fragment android:name="net.learn2develop.Fragments.Fragment2" android:id="@+id/fragment2" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> </LinearLayout>
حال نوبت به بخش کلاس فرگمنت ها رسیده پس در فایل Fragment1.java چنین کدنویسی میکنیم
package net.learn2develop.Fragments; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //---Inflate the layout for this fragment--- return inflater.inflate( R.layout.fragment1, container, false); }
و فایل Fragment2.java نیز بدین صورت
package net.learn2develop.Fragments; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //---Inflate the layout for this fragment--- return inflater.inflate( R.layout.fragment2, container, false); } @Override public void onStart() { super.onStart(); //---Button view--- Button btnGetText = (Button) getActivity().findViewById(R.id.btnGetText); btnGetText.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { TextView lbl = (TextView) getActivity().findViewById(R.id.lblFragment1); Toast.makeText(getActivity(), lbl.getText(), Toast.LENGTH_SHORT).show(); } }); } }
و درون فایل FragmentsActivity.java نیز بدین ترتیب
package net.learn2develop.Fragments; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class FragmentsActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void onClick(View v) { TextView lbl = (TextView) findViewById(R.id.lblFragment1); Toast.makeText(this, lbl.getText(), Toast.LENGTH_SHORT).show(); } }
حال میتوان برنامه را اجرا کرده و نتیجه را طبق تصویر زیر مشاهده کرد.
از آنجا که فرگمنت ها در اکتیویتی ها enable شده اند. میتوانید با استفاده از متد getActivity() اکتیویتی والد را پیدا کرده و سپس با استفاده از متد findViewById() عنصری را که در فرگمنت است پیدا کنید:
TextView lbl = (TextView) getActivitty().findViewById(R.id.lblFragment1); Toast.makeText(this, lbl.getText(), Toast.LENGTH_SHORT).show();
متد getActivity() اکتیویتی مربوط به فرگمنت کنونی را برمیگرداند. البته بجای این کار میتوان کدزیر را اضافه کرد
TextView lbl = (TextView) findViewById(R.id.lblFragment1); Toast.makeText(this, lbl.getText(), Toast.LENGTH_SHORT).show();