অন্যরা ইতিমধ্যে বলেছে যে অনক্লিকের পদ্ধতিগুলি ক্রিয়াকলাপগুলিতে অনুসন্ধান করা হয়, খণ্ডগুলিতে নয়। তা সত্ত্বেও, যদি সত্যিই এটি করতে চান, এটা হয় সম্ভব।
মূলত, প্রতিটি দৃশ্যের একটি ট্যাগ রয়েছে (সম্ভবত নাল)। আমরা রুট ভিউয়ের ট্যাগটিকে সেই টুকরাতে সেট করেছি যা সেই দৃশ্যকে স্ফীত করে। তারপরে, ভিউ পিতামাতাদের সন্ধান করা এবং ক্লিক করা বোতামযুক্ত টুকরাটি পুনরুদ্ধার করা সহজ। এখন, আমরা পদ্ধতির নামটি সন্ধান করি এবং পুনরুদ্ধার করা খণ্ড থেকে একই পদ্ধতিতে কল করতে প্রতিবিম্বটি ব্যবহার করি। সহজ!
প্রসারিত একটি শ্রেণিতে Fragment
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_id, container, false);
OnClickFragments.registerTagFragment(rootView, this);
return rootView;
}
public void onButtonSomething(View v) {
Log.d("~~~","~~~ MyFragment.onButtonSomething");
}
সমস্ত ক্রিয়াকলাপ একই বোতামহ্যান্ডলিংঅ্যাক্টিভিটি থেকে উদ্ভূত:
public class PageListActivity extends ButtonHandlingActivity
বাটনহ্যান্ডলিংঅ্যাক্টিভিটি.জভা:
public class ButtonHandlingActivity extends Activity {
public void onButtonSomething(View v) {
OnClickFragments.invokeFragmentButtonHandlerNoExc(v);
}
}
এটিতে সমস্ত এক্সএমএল অনক্লিক হ্যান্ডলারের জন্য পদ্ধতি নির্ধারণ করতে হবে।
com / উদাহরণ / কাস্টোমন্ড্রয়েড / অনক্লিকফ্রেগমেন্টস.জভা:
package com.example.customandroid;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.app.Fragment;
import android.view.View;
public abstract class OnClickFragments {
public static class FragmentHolder {
Fragment fragment;
public FragmentHolder(Fragment fragment) {
this.fragment = fragment;
}
}
public static Fragment getTagFragment(View view) {
for (View v = view; v != null; v = (v.getParent() instanceof View) ? (View)v.getParent() : null) {
Object tag = v.getTag();
if (tag != null && tag instanceof FragmentHolder) {
return ((FragmentHolder)tag).fragment;
}
}
return null;
}
public static String getCallingMethodName(int callsAbove) {
Exception e = new Exception();
e.fillInStackTrace();
String methodName = e.getStackTrace()[callsAbove+1].getMethodName();
return methodName;
}
public static void invokeFragmentButtonHandler(View v, int callsAbove) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
String methodName = getCallingMethodName(callsAbove+1);
Fragment f = OnClickFragments.getTagFragment(v);
Method m = f.getClass().getMethod(methodName, new Class[] { View.class });
m.invoke(f, v);
}
public static void invokeFragmentButtonHandler(View v) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
invokeFragmentButtonHandler(v,1);
}
public static void invokeFragmentButtonHandlerNoExc(View v) {
try {
invokeFragmentButtonHandler(v,1);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public static void registerTagFragment(View rootView, Fragment fragment) {
rootView.setTag(new FragmentHolder(fragment));
}
}
এবং পরবর্তী অ্যাডভেঞ্চার অবরুদ্ধ হয়ে উঠবে ...
পুনশ্চ
এটা যে ডাটা বাস, যাতে আপনার আবেদন ডিজাইন করতে অবশ্যই আপ আপনাকে হয় মডেল বদলে ক্রিয়াকলাপ বা টুকরা (যা হয় কন্ট্রোলার থেকে MVC , মডেল দেখুন-কন্ট্রোলার দৃষ্টিকোণ)। দেখুন আপনি XML মাধ্যমে কি সংজ্ঞায়িত, প্লাস কাস্টম ভিউ শ্রেণীর (যদি আপনি তাদের সংজ্ঞায়িত, অধিকাংশ মানুষ শুধু পুনরায় ব্যবহার ইতিমধ্যে কি) হয়। থাম্বের একটি নিয়ম: যদি কিছু ডেটা অবশ্যই স্ক্রিনের বাঁক থেকে বেঁচে থাকে তবে সেগুলি মডেলের ।