जब मैं यहां खोज करता हूं तो बहुत सारे लेआउट प्रश्न होते हैं, लेकिन मुझे इसे संबोधित करने के लिए कुछ नहीं मिल रहा है - और संभवतः इसलिए कि मैं इसके बारे में गलत तरीके से जा रहा हूं, या शायद गलत शब्दों का उपयोग करके यह वर्णन करने के लिए कि मैं क्या हासिल करने की कोशिश कर रहा हूं . अगर इसका उत्तर कहीं और दिया गया है तो मैं पहले से क्षमा चाहता हूं, लेकिन कुछ पॉइंटर्स की सराहना करता हूं।

मैं जो करना चाहता हूं वह एक लॉगिन कार्य के लिए एक स्क्रीन है, फिर एक बार लॉग इन करने के बाद मैं कुछ अन्य सामान करने के लिए दूसरी स्क्रीन पर जाता हूं (और इस स्क्रीन का एक बिल्कुल अलग लेआउट होगा)।

मेरे पास सवाल यह है: क्या मेरे पास दो अलग-अलग लेआउट हो सकते हैं (यानी: main.xml और login.xml), और कोड में मैं कहां हूं, इस पर निर्भर करते हुए, बस उन्हें बदल दें? और अगर ऐसा है तो कैसे?

मैंने कोड में setContentView(R.layout.login); जोड़ने का प्रयास किया था, लेकिन ऐसा लगता है कि आप अंतिम एक सेट को चुनें और इसके साथ चिपके रहें, भले ही आप कोड में कहीं भी हों। मैंने लॉगिन भाग को दूसरे वर्ग में तोड़ने की भी कोशिश की, फिर इसे कॉल करने के लिए startActivity(new Intent(this, Login.class)); का उपयोग करें, लेकिन यह लगभग मुख्य ऐप के समानांतर चलता है, क्योंकि मुख्य ऐप में चीजें लॉगिन पूरा होने से पहले भी चलती रहती हैं।

यानी: मुख्य गतिविधि में:

startActivity(new Intent(this, Login.class));
Toast.makeText(this, "This is main", Toast.LENGTH_LONG).show();

तब मुझे लॉगिन स्क्रीन पॉप अप मिलती है, इसके ऊपर टोस्ट संदेश पॉप अप होता है - और मुख्य गतिविधि सिर्फ लॉगिन गतिविधि में जो कुछ भी करती है उसके बावजूद चलती है। लॉगिन गतिविधि या तो समाप्त नहीं होती है - क्या मुझे इसे मारने की ज़रूरत है, या उस पर एक System.exit() करना है?

मैं उम्मीद कर रहा हूं कि यह कुछ आसान है मैं गलत कर रहा हूं, मैं विभिन्न वेबसाइटों और मेरे पास दो पाठ्यपुस्तकों से विचारों को दूर करने की कोशिश कर रहा हूं, लेकिन कुछ भी काम नहीं कर रहा है।

किसी भी मदद या विचारों की बहुत सराहना की जाएगी

0
Steve 13 अप्रैल 2011, 14:44
यदि आप onStop को ओवरराइड करते हैं तो आपकी गतिविधि रिकॉर्ड कर सकती है कि यह अब उपयोगकर्ता को दिखाई नहीं देती है और अनुचित टोस्ट नहीं बनाती है। developer.android.com/reference/android/app/…
 – 
Jim Blackler
13 अप्रैल 2011, 15:06
मैं इसे आज़मा दूंगा। बस एक 'रोका हुआ' बूलियन होने जैसा कुछ है जिसे मैंने ऑनस्टॉप() विधि में सत्य सेट किया है, फिर लॉगिन गतिविधि शुरू करने के बाद थोड़ी देर (रोका) {} करें? चीयर्स, स्टीव
 – 
Steve
13 अप्रैल 2011, 15:24
हां। onStart() में इसे गलत के रूप में सेट करना न भूलें
 – 
Jim Blackler
13 अप्रैल 2011, 15:30
यह काम नहीं किया ... जीयूआई को लॉक करने का कारण बना, लेकिन अब मुझे बैक-बटन नरक से आपका क्या मतलब है। मैंने लॉगिन स्क्रीन से शुरू करने के लिए प्रोग्राम को पुनर्गठित किया है, फिर एक बार ऑथ किए गए नए को खोलें, और पृष्ठभूमि में सॉकेट कनेक्ट होने के बाद लॉगिन स्क्रीन खुद को मार देती है। इसके साथ आपकी मदद का शुक्रिया।
 – 
Steve
17 अप्रैल 2011, 09:20

3 जवाब

सबसे बढ़िया उत्तर

ऐसा करने का सही तरीका यह है कि दो गतिविधियाँ MainActivity और LoginActivity हों, जिनमें से प्रत्येक का अपना लेआउट हो। यदि आप उस दृष्टिकोण को नहीं अपनाते हैं तो आप बैक-बटन नरक में आ जाएंगे।

(पुन: "लॉगिन पूरा होने से पहले भी मुख्य ऐप में चीजें चलती रहीं" आपको यह समझाने के लिए और विवरण जोड़ने की आवश्यकता होगी कि आप क्या देख रहे थे, यह मुझे सही नहीं लगता।)

3
Jim Blackler 13 अप्रैल 2011, 14:46
धन्यवाद जिम ... मेरे पास अभी यही है, और मेरे पास मुख्य गतिविधि से लॉगिन गतिविधि को कॉल करने के लिए उपरोक्त स्टार्टएक्टिविटी है - लेकिन मेरे मुख्य ऐप में अगली पंक्ति टोस्ट है, जो प्रतीक्षा करने के बजाय सीधे दिखाई देती है पूरा करने के लिए लॉगिन, यही कारण है कि मैं भ्रमित हो रहा हूं। साथ ही, लॉगिन गतिविधि पूरी होने पर मुख्य गतिविधि पर वापस नहीं आती है, जिसे मैं काफी समझ नहीं पा रहा हूं। स्टीव
 – 
Steve
13 अप्रैल 2011, 14:49
- प्रारंभिक पोस्ट में थोड़ा और कोड जोड़ें (जैसे कि 2 गतिविधियाँ, विशेष रूप से onCreates ()) और हम उम्मीद से थोड़ी और मदद कर सकते हैं। :) जिम का सुझाव सही है, आप developer.android.com/ की समीक्षा कर सकते हैं। Reference/android/app/Activity.html फिर से जीवनचक्र के लिए - सिर्फ इसलिए कि आप किसी अन्य गतिविधि में बदल जाते हैं इसका मतलब यह नहीं है कि पुरानी गतिविधि पूरी तरह से चली गई है।
 – 
Codemonkey
13 अप्रैल 2011, 14:53
धन्यवाद क्लॉस, मैंने अपने प्रश्न में थोड़ा बेहतर विवरण के साथ प्रासंगिक कोड जोड़ा ... मैं अभी भी यहां क्या करना है के साथ संघर्ष कर रहा हूं - मुझे उम्मीद है कि लॉगिन गतिविधि मुख्य को 'फ्रीज' करने का कारण बनेगी जब तक कि लॉगिन समाप्त न हो जाए ... लेकिन ऐसा प्रतीत नहीं होता।
 – 
Steve
13 अप्रैल 2011, 15:14

मुझे लगता है कि आप जो करना चाहते हैं वह एक नई स्क्रीन लॉन्च करना है जब कोई उपयोगकर्ता ठीक से लॉग इन करता है। जब उपयोगकर्ता ठीक से लॉग इन हो तो बस एक नई गतिविधि शुरू करें। निम्नलिखित से सहायता लें:

Intent i = new Intent(this,Login.class);      
        startActivityForResult(i, 1);

यदि आप मुख्य गतिविधि में वापस कुछ क्रिया करना चाहते हैं तो परिणाम प्राप्त करने के लिए फिर से MainActivity में onActivityResult() विधि का उपयोग करें।

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==1){
            Toast.makeText(this, "Pass", Toast.LENGTH_LONG).show();
        }
        else{
            Toast.makeText(this, "Fail", Toast.LENGTH_LONG).show();
        }
    }

ये कोशिश करें।

2
Dinesh Sharma 13 अप्रैल 2011, 14:56
धन्यवाद दिनेश, लेकिन उपयोगकर्ता लॉगिन स्क्रीन से कभी वापस नहीं आएंगे यदि वे ठीक से लॉगिन नहीं करते हैं। यह वास्तव में सुरक्षा स्क्रीन से अधिक एक साधारण प्रमाणीकरण है। प्रमाणीकरण पूरा किए बिना मुख्य ऐप उनके लिए बेकार हो जाएगा। चीयर्स, स्टीव
 – 
Steve
13 अप्रैल 2011, 15:03
यह सिर्फ एक उदाहरण था जो आपको आपकी आवश्यकता के अनुसार दिया गया था। आप इसे अलग तरीके से भी लागू कर सकते हैं।
 – 
Dinesh Sharma
13 अप्रैल 2011, 15:23
अवधारणा अब मेरे लिए उपयोगी है, धन्यवाद... जब मैंने पहली बार प्रश्न पूछा तो मुझे वास्तव में यह समझ में नहीं आया, लेकिन मुझे लगता है कि अब मैं करता हूं। चियर्स
 – 
Steve
17 अप्रैल 2011, 09:25
मैंने एक और उत्तर स्वीकार किया जो मुझे चाहिए था, लेकिन जब मैं प्रश्न पूछता हूं तो मैं हमेशा एक उत्तर स्वीकार करने का प्रयास करता हूं ... मैंने आपके उत्तर को सहायक के रूप में चिह्नित किया है ... आपकी मदद के लिए धन्यवाद :)
 – 
Steve
18 अप्रैल 2011, 11:50

आपके पास कई विकल्प हैं।

शायद बेहतर विकल्प दो अलग-अलग गतिविधियों का उपयोग करना है। जब आप दूसरी (मुख्य गतिविधि) शुरू करते हैं, तो पहले वाले (लॉगिन गतिविधि) में activity.finish() पर कॉल करें।

1
Pedro Loureiro 13 अप्रैल 2011, 14:58
हाय पेड्रो, क्षमा करें, मुझे यकीन नहीं है कि आपका यहाँ क्या मतलब है। मैं activity.finish() को कैसे कॉल करूं?
 – 
Steve
13 अप्रैल 2011, 15:12
दूसरी गतिविधि शुरू करने के ठीक बाद। यह संभवत: उपयोगकर्ता द्वारा प्रमाणित करने के लिए एक बटन दबाए जाने के बाद होता है। इसे startActivity(new Intent(this, Login.class)); लाइन के बाद करने का प्रयास करें (आप बस finish() को कॉल कर सकते हैं क्योंकि आप पहले से ही गतिविधि में हैं।
 – 
Pedro Loureiro
13 अप्रैल 2011, 16:51
हाय पेड्रो, धन्यवाद... मैं अब समझ गया। मूल रूप से मैं मुख्य ऐप शुरू कर रहा था, लॉगिन को कॉल कर रहा था, और फिर वापस स्विच कर रहा था ... मैंने इसे आपके सुझाव में बदल दिया है (जैसा कि ऊपर दिए गए सुझाव के साथ है) और अब यह काम कर रहा है। सॉकेट कनेक्ट होने के बाद मैंने लॉगिन स्क्रीन को मारने के लिए फिनिश() का उपयोग किया है, और ऐसा लगता है कि यह काम कर रहा है। चियर्स
 – 
Steve
17 अप्रैल 2011, 09:23