كيفية تمرير القيم من نشاط واحد إلى النشاط السابق

StackOverflow https://stackoverflow.com/questions/1124548

  •  13-09-2019
  •  | 
  •  

سؤال

كيف يمكنني تمرير قيمة من شاشة واحدة إلى الشاشة السابقة؟

النظر في هذه الحالة: لدي نشاطان. الشاشة الأولى لديها واحدة TextView وزر والنشاط الثاني لديه واحد EditText وزر.

إذا قمت بالنقر فوق الزر الأول، فعليه الانتقال إلى النشاط الثاني وهنا المستخدم يجب أن يكتب شيئا في مربع النص. إذا ضغط على الزر من الشاشة الثانية، فإن القيم من مربع النص يجب أن تنتقل إلى النشاط الأول ويجب عرضها في النشاط الأول TextView.

هل كانت مفيدة؟

المحلول

لالتقاط الإجراءات المنجزة في نشاط واحد داخل آخر يتطلب ثلاث خطوات.

قم بتشغيل النشاط الثانوي (نشاط "تحرير النص" الخاص بك) كعنوية باستخدام startActivityForResult من نشاطك الرئيسي.

Intent i = new Intent(this,TextEntryActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

ضمن العدوانية، بدلا من إغلاق النشاط عندما ينقر المستخدم على الزر، تحتاج إلى إنشاء نية جديدة وتضمين قيمة النص المدخلة في حزمة إضافاتها. لتمريره إلى الدعوة الأصل setResult قبل الاتصال finish لإغلاق النشاط الثانوي.

Intent resultIntent = new Intent();
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

الخطوة الأخيرة هي في نشاط المكالمات: تجاوز onActivityResult للاستماع إلى عمليات الاسترجاعات من نشاط إدخال النص. احصل على إضافي من النية المرتجعة للحصول على قيمة النص يجب أن تعرض.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      String newText = data.getStringExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Update your TextView.
      } 
      break; 
    } 
  } 
} 

نصائح أخرى

هناك طريقتان يمكنك من خلالها الوصول إلى المتغيرات أو الكائن في الفئات أو النشاط الأخرى.

قاعدة البيانات

التفضيلات المشتركة.

C. تسلسل الكائن.

يمكن تسمية الفصل الذي يمكن أن يحمل بيانات شائعة كأداة مساعدة مشتركة يعتمد عليك.

E. تمرير البيانات من خلال النوايا وواجهة لا تتردد.

يعتمد على احتياجات المشروع الخاص بك.

أ. قاعدة البيانات

SQLite عبارة عن قاعدة بيانات مفتوحة المصدر التي يتم تضمينها في Android. يدعم SQLite ميزات قاعدة البيانات العلائقية القياسية مثل بناء جملة SQL والمعاملات والبيانات المعدة.

دروس -- http://www.vogella.com/articles/androidsqlite/article.html.

ب. تفضيلات المشتركة

افترض أنك تريد تخزين اسم المستخدم. لذلك سيكون هناك الآن اثنين آخر مفتاح اسم المستخدم، قيمة قيمة.

كيفية تخزين

 // Create object of SharedPreferences.
 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
 //now get Editor
 SharedPreferences.Editor editor = sharedPref.edit();
 //put your value
 editor.putString("userName", "stackoverlow");

 //commits your edits
 editor.commit();

باستخدام podstring ()، putboolean ()، putint ()، putfloat ()، putlong () يمكنك حفظ نموذج dtatype المطلوب.

كيفية جلب

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");

http://developer.android.com/Reference/android/content/sharedpreferences.html

جيم تسلسل الكائن

يستخدم تصعد الكائنات إذا كنا نريد حفظ حالة كائن لإرساله عبر الشبكة أو يمكنك استخدامه لغرضك أيضا.

استخدم حبوب Java وتخزينها كأحد مجالاته واستخدام Getters و STERTER لذلك

javabeans هي فصول جافا لديها خصائص. فكر في الخصائص كمتغيرات مثيل خاص. نظرا لأنهم خاصة، فإن الطريقة الوحيدة التي يمكن الوصول إليها من خارج فئتها هي من خلال طرق في الفصل. تسمى الأساليب التي تغير قيمة العقار أساليب SETTER، وتسمى الأساليب التي تسترجع قيمة العقار أساليب Getter.

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}

قم بتعيين المتغير في طريقة البريد الخاصة بك باستخدام

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);

ثم استخدم Serialzation الكائن لتسليط هذا الكائن وفي صفك الآخر الذي تحيز هذا الكائن.

في التسلسل، يمكن تمثيل كائن كمتسلسل من البايتات التي تتضمن بيانات الكائن وكذلك معلومات حول نوع الكائن وأنواع البيانات المخزنة في الكائن.

بعد كتابة كائن متسلسل في ملف، يمكن قراءته من الملف والترمس الذي هو، يمكن استخدام معلومات النوع والبايت التي تمثل الكائن وبياناتها لإعادة إنشاء الكائن في الذاكرة.

إذا كنت تريد البرنامج التعليمي لهذا إحضار هذا الرابط

http://javawithswaranga.blogspot.inougspot.ino1/2/08/serialization-in-java.html.

الحصول على متغير في فصول أخرى

د. الكوغرطات

يمكنك إنشاء فئة بنفسك والتي يمكن أن تحتوي على بيانات مشتركة تحتاجها بشكل متكرر في مشروعك.

عينة

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

هيا تمرير البيانات من خلال النوايا

يرجى الرجوع إلى هذا البرنامج التعليمي لهذا الخيار من اجتياز البيانات.

http://shri.blog.kraya.co.ukoy/0/04/26/Android-Paly-Pass-Pass-between-betivities-using-philable-classes/

أنت لا تضطر إلى ..

فقط اتصل Newintenet () من النشاط الثاني

Intent retData=new Intent();

إضافة بيانات لتمرير الظهر

putExtras (retData.putExtra("userName", getUsrName()));

المضي قدما مع setResult

setResult(RESULT_OK, retData);

ويمكن بعد ذلك الانتهاء

finish();

StartActivityForreSult ()

وهنا رابط من SDK مع مزيد من المعلومات:

http://developer.android.com/guide/appendix/faq/commontasks.html#opennewscreen.

والتمرير إلى الجزء المسمى "إرجاع النتيجة من شاشة"

غالبا ما استخدم المتغيرات الثابتة في نشاط المكالمات مع طرق STATIC SETTER لتعيينها.

وبهذه الطريقة يمكنني تغيير القيم في أي نشاط في الإرادة، بغض النظر عن التدفق الدقيق للتحكم بين الأنشطة المختلفة.

لاحظ أن هذه الخدعة لا يمكن استخدامها إلا إذا كنت لا تهتم بميزة أكثر من نسخة واحدة من نفس النشاط (الفئة) في التطبيق، ومع ذلك، وجدت أن هذا هو الأسهل في التنفيذ، وأستعبها أكثر وبعد

أفضل طريقة للقيام بها هنا هي وضع متغير إلى فئة مشتركة يتم تعريفها خارج النطاق

public class Utils 
{
    public static String mPosition;
}

داخل الكود الخاص بك (مثل OnButtonClick وما إلى ذلك ...)

Intent intent = new Intent(Intent.ACTION_PICK, 
ContactsContract.Contacts.CONTENT_URI);
Utils.mPosition = mViewData.mPosition + "";
LogHelper.e(TAG, "before intent: " + Utils.mPosition);
startActivityForResult(intent, Keys.PICK_CONTACT);

داخل رمز

Roverride Public Void InfactivityResult (INTRECDECODE INTERCODE COURDRIDE (INTERTCODE، بيانات INTENTCOD) {IF (requiredcode == keys.pick_contact) {en.

            //you may use the variable here after intent result
            LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top