এক ক্রিয়াকলাপ থেকে পূর্বের ক্রিয়াকলাপে কীভাবে মানগুলি পাস করবেন


100

আমি কীভাবে একটি পর্দা থেকে তার পূর্বের স্ক্রিনে কোনও মান পাস করব?

এই ক্ষেত্রে বিবেচনা করুন: আমার দুটি কার্যক্রম আছে। প্রথম স্ক্রিনটিতে একটি TextViewএবং একটি বোতাম রয়েছে এবং দ্বিতীয় ক্রিয়ায় একটি EditTextএবং একটি বোতাম রয়েছে।

যদি আমি প্রথম বোতামটি ক্লিক করি তবে এটি দ্বিতীয় ক্রিয়াকলাপে চলে যেতে হবে এবং এখানে ব্যবহারকারীকে পাঠ্য বাক্সে কিছু টাইপ করতে হবে। যদি তিনি দ্বিতীয় স্ক্রিন থেকে বোতাম টিপেন তবে পাঠ্য বাক্সের মানগুলি প্রথম ক্রিয়ায় চলে যেতে হবে এবং এটি প্রথম ক্রিয়াকলাপে প্রদর্শিত হবে TextView



উত্তর:


244

অন্য ক্রিয়াকলাপের মধ্যে একটি ক্রিয়াকলাপ সম্পাদনের জন্য তিনটি পদক্ষেপ প্রয়োজন।

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; 
    } 
  } 
} 

27
new Intent(null);"খুব দ্ব্যর্থক" বাদে এগুলি আমার পক্ষে কাজ করেছিল এবং আমাকে এটিতে পরিবর্তন করতে হয়েছিল new Intent();
রিচার্ড টিঙ্গল

4
এটি কেবল একই প্রসঙ্গে কাজ করবে তা লক্ষণীয়। উদাহরণস্বরূপ আপনি যদি কোনও খণ্ড থেকে ক্রিয়াকলাপটি শুরু করেন তবে এটি কাজ করবে না কারণ অনুরোধকোড প্রতিবারই আলাদা হবে। আপনি খণ্ডে getActivity () শুরু startActivityForResult () ব্যবহার করতে হবে।
স্টেফ

রেটো - আপনি কি আমার সাম্প্রতিক একটি অনুরূপ পরিস্থিতি সম্পর্কে সাম্প্রতিক প্রশ্নটি দেখে মনে করবেন?
ব্রায়ান পটস

10

এমন কয়েকটি উপায় রয়েছে যার মাধ্যমে আপনি অন্যান্য ক্লাসে বা ক্রিয়াকলাপে ভেরিয়েবল বা অবজেক্ট অ্যাক্সেস করতে পারেন।

উ: ডাটাবেস

বি ভাগ করা পছন্দ।

গ। বস্তু সিরিয়ালকরণ।

ডি। একটি শ্রেণি যা সাধারণ তথ্য রাখতে পারে তা সাধারণ ইউটিলিটিস হিসাবে এটি আপনার উপর নির্ভর করে নামকরণ করা যেতে পারে।

ই। ইনটেন্টস এবং পার্সেবল ইন্টারফেসের মাধ্যমে ডেটা পাস করা।

এটি আপনার প্রকল্পের প্রয়োজনের উপর নির্ভর করে।

উ: ডাটাবেস

এসকিউএলাইট একটি ওপেন সোর্স ডেটাবেস যা অ্যান্ড্রয়েড এ এমবেড করা আছে। এসকিউএলাইট এসকিউএল সিনট্যাক্স, লেনদেন এবং প্রস্তুত বিবৃতিগুলির মতো স্ট্যান্ডার্ড রিলেশনাল ডাটাবেস বৈশিষ্ট্যগুলিকে সমর্থন করে।

টিউটোরিয়াল- 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();

পুটস্ট্রিং (), পুটবুলিয়ান (), পুটইন্ট (), পুটফ্লোট (), পুটলং () ব্যবহার করে আপনি আপনার পছন্দসই ডিটিটাইপ সংরক্ষণ করতে পারেন।

কীভাবে আনতে হবে

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

http://developer.android.com/references/android/content/SharedPreferences.html

সি। সিরিজ অবজেক্ট

যদি আমরা কোনও অবজেক্টের স্টেটটিকে নেটওয়ার্কের মাধ্যমে প্রেরণ করতে বা সংরক্ষণ করতে চাই তবে অবজেক্ট সারলাইজেশন ব্যবহৃত হয় you

জাভা বিন এবং তার ক্ষেত্রগুলির মধ্যে একটি হিসাবে এটি সংরক্ষণ করুন এবং তার জন্য গেটর এবং সেটটার ব্যবহার করুন

জাভাবিয়ানস জাভা ক্লাস যা বৈশিষ্ট্য আছে। বৈশিষ্ট্যগুলিকে ব্যক্তিগত উদাহরণের ভেরিয়েবল হিসাবে ভাবেন। যেহেতু তারা ব্যক্তিগত, তাই তাদের ক্লাসের বাইরে থেকে অ্যাক্সেসের একমাত্র উপায় ক্লাসের পদ্ধতিগুলির মাধ্যমে। যে সমস্ত পদ্ধতির দ্বারা কোনও সম্পত্তির মান পরিবর্তিত হয় সেগুলিকে সেটার পদ্ধতিগুলি বলা হয় এবং যে পদ্ধতিগুলির দ্বারা সম্পত্তির মূল্য পুনরুদ্ধার করা হয় তাকে গেটর পদ্ধতি বলা হয়।

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);

তারপরে এই বিষয়টিকে সিরিয়ালাইজ করার জন্য অবজেক্ট সিরিয়ালাইজেশন ব্যবহার করুন এবং আপনার অন্যান্য শ্রেণিতে এই অবজেক্টটিকে ডিসরিয়ালাইজ করুন।

সিরিয়ালাইজেশনে কোনও বস্তুকে বাইটের ক্রম হিসাবে উপস্থাপন করা যেতে পারে যার মধ্যে অবজেক্টের ডেটা পাশাপাশি অবজেক্টের ধরণ এবং অবজেক্টে সঞ্চিত ডেটার ধরণগুলি অন্তর্ভুক্ত থাকে।

সিরিয়ালযুক্ত কোনও বস্তু কোনও ফাইলে লেখার পরে, এটি ফাইল থেকে পড়তে পারে এবং এটি ডিসরিওলাইজ করা যায়, যা সেই ধরণের তথ্য এবং বাইটগুলি যা বস্তুর প্রতিনিধিত্ব করে এবং এর ডেটা ব্যবহার করে স্মৃতিতে বস্তুটিকে পুনরায় তৈরি করতে পারে।

আপনি যদি এইটির জন্য টিউটোরিয়াল চান তবে এই লিঙ্কটি দেখুন

http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html

অন্যান্য ক্লাসে পরিবর্তনশীল পান

D. সাধারণ ইউটিলিটিস

আপনি আপনার নিজের দ্বারা একটি বর্গ তৈরি করতে পারেন যা আপনার প্রকল্পে প্রায়শই প্রয়োজন হয় এমন সাধারণ ডেটা থাকতে পারে।

নমুনা

public class CommonUtilities {

    public static String className = "CommonUtilities";

}

ই। ইনটেন্টের মাধ্যমে ডেটা পাস করা

ডেটা পাস করার এই বিকল্পের জন্য দয়া করে এই টিউটোরিয়ালটি দেখুন।

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between- Activities-used-parcelable-classes/


6

তোমার দরকার নেই ...

দ্বিতীয় ক্রিয়াকলাপ থেকে কেবল নিউইন্টেন্টকে কল করুন

Intent retData=new Intent();

ফিরে যেতে ডেটা যুক্ত করুন

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

সেটরেসাল্টের সাথে এগিয়ে যান

setResult(RESULT_OK, retData);

এবং তারপর শেষ করতে পারেন

finish();

4

startActivityForResult ()

এবং আরও তথ্যের সাথে এখানে এসডিকে থেকে একটি লিঙ্ক দেওয়া হয়েছে:

http://developer.android.com/guide/appendix/faq/commontasks.html# ওপেনিউস্ক্রিন

এবং "একটি স্ক্রিন থেকে ফলাফল প্রত্যাবর্তন" শিরোনাম অংশে স্ক্রোল করুন


2

আমি প্রায়শই সেট করতে স্ট্যাটিক সেটার পদ্ধতি সহ কলিং ক্রিয়াকলাপে স্থির পরিবর্তনশীল ব্যবহার করি use

বিভিন্ন ক্রিয়াকলাপের মধ্যে নিয়ন্ত্রণের সঠিক প্রবাহ নির্বিশেষে আমি ইচ্ছামত যেকোন ক্রিয়াকলাপের মান পরিবর্তন করতে পারি।

মনে রাখবেন যে এই প্রয়োগটি কেবলমাত্র তখনই ব্যবহার করা যেতে পারে যদি আপনি অ্যাপ্লিকেশনটিতে একই ক্রিয়াকলাপের (ক্লাস) একাধিক অনুলিপি ইনস্টল করার বিষয়ে চিন্তা না করে, তবুও আমি এটি প্রয়োগ করা সবচেয়ে সহজ বলে খুঁজে পেয়েছি এবং আমি এটি সর্বাধিক ব্যবহার করি ।


একটি দুর্দান্ত সমাধান নয়। এটি অ্যান্ড্রয়েডের সেরা অনুশীলনের বিরুদ্ধে চলছে। আপনি গ্যারান্টি দিতে পারবেন না যে কোনও কার্যকলাপ নিহত হবে না এবং সিস্টেমের মাধ্যমে একটি নতুন উদাহরণ শুরু হবে।
এসআইআর কোডালট

0

এখানে করার সর্বোত্তম উপায়টি হল একটি সাধারণ শ্রেণিতে ভেরিয়েবল স্থাপন করা যা ক্ষেত্রের বাইরে সংজ্ঞায়িত

public class Utils 
{
    public static String mPosition;
}

আপনার কোডের ভিতরে (যেমন অনবটনক্লিক ইত্যাদি ...)

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);

এর কোডের ভিতরে

অ্যাক্টিভিটিআরসাল্ট @ ওভাররাইড সার্বজনীন অকার্যকর (ফলাফল অনুরোধ কোড, ইন রেজাল্টকোড, ইনটেন্ট ডেটা) {যদি (অনুরোধকোড == কীগুলি Pপিক_কন্ট্যাক্ট) {যদি (ফলাফলকোড == ক্রিয়াকলাপ.আরআইসেলT_OK) {উরি যোগাযোগের ডেটা = ডেটা.ডেটটা ();

            //you may use the variable here after intent result
            LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.