এক্সএমএল লেআউটটির মাধ্যমে আমি একটি কাস্টম ভিউ যুক্ত করেছি এবং তারপরে অ্যাপ্লিকেশনটিতে অন্য কোথাও একটি কলব্যাক সংযুক্ত করার চেষ্টা করেছি ... আমি একই সমস্যাটিতে এসেছি
আমি একটি কাস্টম ভিউ তৈরি করেছি এবং আমার "লেআউট_মাইন.এক্সএমএল" এ যুক্ত করেছি
public class MUIComponent extends SurfaceView implements SurfaceHolder.Callback {
public MUIComponent (Context context, AttributeSet attrs ) {
super ( context, attrs );
}
// ..
}
এবং মূল ক্রিয়াকলাপে আমি কিছু কলব্যাক সংযুক্ত করতে এবং এক্সএমএল থেকে ইউআই উপাদানগুলির রেফারেন্স পেতে চেয়েছিলাম।
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
MUIInitializer muiInit = new MUIInitializer();
muiInit.setupCallbacks(this);
muiInit.intializeFields(this);
}
}
ইনিডিলাইজারটি অভিনব কিছু করছে না তবে কাস্টম ভিউতে (এমইউআইকিউম্পোনেন্ট) বা অন্যান্য নন-কাস্টম ইউআই উপাদানগুলিতে এটি পরিবর্তন করার চেষ্টা করেছিল তবে অ্যাপ্লিকেশনটিতে উপস্থিত হচ্ছিল না।
public class MUIInitializer {
// ...
public void setupCallbacks ( Activity mainAct ) {
// This does NOT work properly
// - The object instance returned is technically an instance of my "MUICompnent" view
// but it is a *different* instance than the instance created and shown in the UI screen
// - Callbacks never get triggered, changes don't appear on UI, etc.
MUIComponent badInst = (MUIComponent) mainAct.findViewById(R.id.MUIComponent_TESTSURF);
// ...
// This works properly
LayoutInflater inflater = (LayoutInflater) mainAct.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflatedLayout = inflater.inflate ( R.layout.activity_main, null );
MUIComponent goodInst = (MUIComponent) inflatedLayout.findViewById(R.id.MUIComponent_TESTSURF);
// Add callbacks
// ...
}
}
"ব্যাডইনস্ট" এবং "গুডইনস্ট" এর মধ্যে পার্থক্যটি হ'ল:
- BadInst ক্রিয়াকলাপের ফাইন্ড ভিউবাইআইডি ব্যবহার করে
- গুডইনস্টটি লেআউটটিকে স্ফীত করে এবং সন্ধানের জন্য স্ফীত লেআউটটি ব্যবহার করে