तो मेरे पास कोड में एक कस्टम व्यू सेट अप है (इसके लिए कोई एक्सएमएल लेआउट परिभाषित नहीं है) और मैं सोच रहा हूं कि बच्चे के दृश्य आईडी को सही ढंग से कैसे परिभाषित किया जाए। I DO में एक XML फ़ाइल परिभाषित आईडी है जो इस तरह के समान है .. लेकिन मैं इसे कैसे समझता हूं, कम से कम, क्योंकि मेरे पास xml लेआउट नहीं है, पास करने के लिए कोई AttribSet नहीं है .. इसलिए मेरे निर्माता सभी बस हैं (संदर्भ संदर्भ) प्रकार के।कस्टम व्यू - मैं अपनी आईडी कैसे सेट करूं ताकि वे findViewById() के माध्यम से मिल सकें?
<resources>
<item type="id" name="textview1"/>
<item type="id" name="textview2"/>
</resources>
और मेरे विचार में इन पंक्तियों के साथ दिखता है:
public class MyView extends View {
protected RelativeLayout baseLayout;
protected TextView textView1;
protected TextView textView2;
public MyView(Context context) {
super(context);
LayoutParams fill = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
setLayoutParams(fill);
Resources res = getResources();
baseLayout = new RelativeLayout(context);
baseLayout.setLayoutParams(fill);
textView1 = new TextView(context);
textView1.setId(R.id.textview1);
// other init stuff here
textView2 = new TextView(context);
textView2.setId(R.id.textview2);
// other init stuff here
baseLayout.addView(textView1);
baseLayout.addView(textView2);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
// *snip lots of stuff*
baseLayout.draw(canvas);
}
// This is only here because findViewById() returns NULL when I search
public TextView getTextView1() {
return textView1;
}
// This is only here because findViewById() returns NULL when I search
public TextView getTextView2() {
return textView2;
}
}
यहाँ गतिविधि दृश्य का उपयोग करता है है ..
public class MyActivity extends Activity {
// This is only here because findViewById() returns NULL when I search
private MyView myView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Resources res = getResources();
myView = new myView(this);
setContentView(myView);
// This returns NULL. :/
// final TextView textView1 = (TextView) findViewById(R.id.textView1);
// This is only here because findViewById() returns NULL when I search..
final TextView textView1 = myView.getTextView1();
final Animation anim = AnimationUtils.loadAnimation(this, R.anim.my_animation);
textView1.setAnimation(anim);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation _anim) {
Log.v("InsideAnimation", "Animation ended");
textView1.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationRepeat(Animation _anim) {
Log.v("InsideAnimation", "Animation repeated");
}
@Override
public void onAnimationStart(Animation _anim) {
Log.v("InsideAnimation", "Animation started");
}
});
anim.reset();
textView1.startAnimation(anim);
}
}
मुख्य समस्या यह है कि एनीमेशन मैं लोड है (जो एक्सएमएल में परिभाषित किया गया है) और शुरूआत बिल्कुल कुछ नहीं करता है। मुझे "एनीमेशन शुरू हुआ" का लॉग स्टेटमेंट मिलता है लेकिन यह है। यह कभी खत्म नहीं होता है और जब मैं इसे अनुकरण करता हूं तो यह कभी भी कुछ नहीं करता है। ऐसा लगता है जैसे यह शुरू होता है, लेकिन वास्तव में नहीं चलता है। I सोचें समस्या यह है कि शायद एनीमेशन एक्सएमएल आईडी लेआउट परिभाषाओं का उपयोग करने के लिए उपयोग करने की उम्मीद कर रहा है, लेकिन चूंकि findViewById() NULL देता है, मुझे लगता है कि भाग टूट गया है (और इस प्रकार एनीमेशन काम नहीं करता है)। तो .. कम से कम अभी के लिए, मैं यह जानना चाहता हूं कि आईडी को सेट करने के साथ मैं क्या गलत कर रहा हूं ताकि मैं सही दृश्य वापस करने के लिए खोजने के लिए ViewById() ढूंढ सकूं और न कि ... और फिर संभवतः एनीमेशन काम करेगा । (या यदि यह अभी भी उस बिंदु के बाद काम नहीं करता है, तो मुझे शायद xml के बजाय कोड में एनीमेशन को परिभाषित करना होगा)
कोई भी मदद या सुझावों की सराहना की जाती है।
मैं गारंटी दे सकता हूं कि टेक्स्टव्यू तत्काल है .. मैंने लॉग इन करने के लिए लॉग.व स्टेटमेंट (इससे पहले कि मैंने कभी इसे पोस्ट किया) चलाया।तात्कालिकता का उत्पादन इसे आईडी के माध्यम से खोजने की कोशिश करने के आउटपुट से पहले मौजूद था। व्यू को विस्तारित करने के लिए - मैंने पहले से ही व्यू के बजाय रिलेवेटिवआउट को विस्तारित करने का प्रयास किया है .. लेकिन जब मैं करता हूं कि मेरे पास ऑन-स्ट्रॉ के अंदर मौजूद अन्य सामान अब ड्रॉ नहीं करते हैं (जो मुझे यकीन है कि मैं संभावित रूप से ठीक कर सकता हूं, लेकिन मैं हूं यकीन नहीं है कि यह क्यों आकर्षित नहीं करेगा ... लेकिन कोई भी कम नहीं, यह नहीं करता है)। (cont) –
हालांकि, मैं बस खोजने के बजाय myView.findViewById() को चलाने का प्रयास कर सकता हूं। केवल ..ViewById() .. जो काम कर सकता है। खाने के बाद मैं आपको बता दूंगा। सिर्फ एक एक्सएमएल लेआउट के अंदर डिजाइन करने के मामले में .. मुझे पता है कि मैं ऐसा कर सकता हूं (और वास्तव में पहले से ही)। लेकिन समस्या यह है कि मैं चाहता हूं कि यह प्रदर्शन के आयामों के आधार पर मूल्यों की गणना करे ... एक्सएमएल का उपयोग करके ऐसा नहीं होगा, इसलिए मैं xml के बजाय कोड के भीतर काम कर रहा हूं। मैं चाहता हूं कि मेरे प्रोग्राम को कई प्रकार के डिस्प्ले के लिए एक्सएमएल लेआउट न किए बिना एकाधिक डिस्प्ले पर समान दिखना पड़े ... मैं आपके द्वारा बताए गए प्रयासों का प्रयास करूंगा। –
इसलिए मैंने अपनी कक्षा में एक विधि जोड़ा जिसने मुझे रिलेवेटिवआउट दिया, और फिर मैंने 'myRelativeLayout.findViewById (R.id.textview1)' चलाया और वास्तव में यह सही ऑब्जेक्ट वापस कर दिया, इसलिए आपने जो सुझाव दिया था। :) दुर्भाग्यवश, एनीमेशन अभी भी कुछ भी नहीं कर रहा है .. Sooooo .. मुझे कोड में एनीमेशन भी प्रोग्राम करना पड़ सकता है। मुझे नहीं पता। मैं एक नया प्रोग्रामर नहीं हूं - एंड्रॉइड के लिए बिल्कुल नया, और यह कुछ चीजें करता है जो मेरे लिए अजीब लगती हैं। –