ارسال بيانات من الفراكمنت الى النافذة الام
29 May
activity : هي النافدة .
fragment :هي الفراكمنت
لعل ارسال البيانات من النافذة سهل و ذلك عبر ارسال bundle بواسطة argument لكن ماذا عن العكس اي ارسال بيانات من الفراكمنت الى النافذة لعلك مثلي استخدمت احد الطرق الملتوية لحل المشكلة لكن ما هي الطريقة الامثل لارسال للتواصل بينهما هناك طريقتان لا ثلاتة لهما الاولى و هي غالبا ستتجاهلها و هي عبر مكتبة viewModal التي شرحنها سابقا و الطريقة الثانية هي التي جئت لاسردها عليك اليوم يا صديقي .
عزيزي المبرمج/المبرمجة اعلم ان غير هذه الطرق من bad practice اي ليس جيدة فقد يتوقف التطبيق كما حدث معي خلاصة القول استعمل هذه الطريقة :
2-ارسال البيانات من الفراكمنت الى النافذة
المصادر :
fragment :هي الفراكمنت
لعل ارسال البيانات من النافذة سهل و ذلك عبر ارسال bundle بواسطة argument لكن ماذا عن العكس اي ارسال بيانات من الفراكمنت الى النافذة لعلك مثلي استخدمت احد الطرق الملتوية لحل المشكلة لكن ما هي الطريقة الامثل لارسال للتواصل بينهما هناك طريقتان لا ثلاتة لهما الاولى و هي غالبا ستتجاهلها و هي عبر مكتبة viewModal التي شرحنها سابقا و الطريقة الثانية هي التي جئت لاسردها عليك اليوم يا صديقي .
![]() |
سلسلة دروس Fragment |
عزيزي المبرمج/المبرمجة اعلم ان غير هذه الطرق من bad practice اي ليس جيدة فقد يتوقف التطبيق كما حدث معي خلاصة القول استعمل هذه الطريقة :
1-ارسال البيانات من النافذة الى الفراكمنت
//ارسال
val fragment=Myfragment()
val bundle=Bundle()
bundle.putInt("Age",567)
bundle.putString("name","ابو ثعلبة")
fragment.arguments=bundle
supportFragmentManager.beginTransaction().add(R.id.host,fragment).commit()
//التقاط
val age = arguments.getInt("age")
val name = arguments.getString("name")
2-ارسال البيانات من الفراكمنت الى النافذة
- سنقوم بانشاء فراكمنت بسيطة
- لاجل السماح للفراكمنت بالتواصل مع النافذة الام يجب انشاء interface في الفراكمنت و ربطه مع النافذة حيث يتم التقاط interface في اول دورة من دورات الفراكمنت onAttatch بعدها نستدعي دالة interface للتواصل مع الواجهة
- ربط interface بالنافذة .
- ارسال البيانات من الفراكمنت الى النافدة لذلك سنفترض ان لدينا زر و حقل عند الضغط على الزر سياخذ ما ادخله المستخدم في الحقل و يرسله الى النافذة كما سبق و ذكرنا .
- اخد القيمة من طرف النافدة :
class myFragment :Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.frag,container,false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
}
}
class myFragment :Fragment() {
lateinit var onButtonClicked:OnButtonClicked
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.frag,container,false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
//التنصت على الزر
button.setOnClickListener {
//اخد القيمة و ارسالها الى انترفيس
val name=field.text.toString()
onButtonClicked.onButtonClicked(name)
}
}
//الربط مع النافدة
override fun onAttach(context: Context?) {
super.onAttach(context)
onButtonClicked=context as OnButtonClicked
}
interface OnButtonClicked {
fun onButtonClicked(name: String)
}
}
class Main : AppCompatActivity() ,myFragment.OnButtonClicked{
override fun onButtonClicked(name: String) {
//افعل بها ما تريد
Toast.makeText(this,"ismail",Toast.LENGTH_LONG).show()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.signin)
}
}
المصادر :
اترك لنا تعليقا