পিছনে চাপলে কীভাবে দ্বিতীয় ক্রিয়াকলাপ থেকে প্রথম ক্রিয়াকলাপে ডেটা পাস করবেন? - অ্যান্ড্রয়েড


184

আমি 2 ক্রিয়াকলাপ, ক্রিয়াকলাপ 1 এবং ক্রিয়াকলাপ 2 ।

ইন Activity1আমি একটি করেছি বাটন এবং TextView । বোতামটি ক্লিক করা হলে কার্যকলাপ 2 শুরু হয়।

ইন Activity2আমি একটি করেছি editText

আমি তথ্য থেকে উদ্ধার করা প্রদর্শন করাতে চান editText মধ্যে Activity2 মধ্যে TextView মধ্যে Activity1 যখন পিছন থেকে চাপা হয় Activity2

এই কাজটি করতে কেউ আমাকে কোড দিয়ে সহায়তা করতে পারেন?


2
সম্পর্কে পড়ুনstartActivityForResult
দিমিত্রি জায়েতসেভ


অন্য উপায়: Activity2ধ্রুব স্টোরেজে মান রাখে এবং Activity1সেখান থেকে এটি পড়ে reads
হেনরি

@ কুমারলোড: আপনি দয়া করে সমাধানটি এখানে ভাগ করে নিতে পারেন। পাস্তবিন এখন পর্যন্ত আমার দেশে কাজ করছে না।
ব্যবহারকারী1903022

উত্তর:


326

ক্রিয়াকলাপ 2 দিয়ে ক্রিয়াকলাপ শুরু করুন startActivityForResultএবং setResultক্রিয়াকলাপ 2 থেকে ক্রিয়াকলাপ 1 এ ডেটা পাঠানোর জন্য পদ্ধতিটি ব্যবহার করুন। Activity1 আপনি ওভাররাইড করতে হবে onActivityResultআপডেট করার জন্য TextViewসঙ্গে EditTextActivity2 থেকে তথ্য।

উদাহরণ স্বরূপ:

ইন Activity1 , Activity2 যেমন শুরু হয়:

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

ইন Activity2 , ব্যবহার setResultডেটা পাঠিয়ে জন্য ফিরে:

Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);        
finish();

এবং ক্রিয়াকলাপ 1 এ এর সাথে ডেটা গ্রহণ করুন onActivityResult:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
         if(resultCode == RESULT_OK) {
             String strEditText = data.getStringExtra("editTextValue");
         }     
    }
} 

আপনি যদি পারেন তবে ক্রিয়াকলাপগুলির মধ্যে ডেটা ভাগ করে নেওয়ার জন্য ভাগ করা পছন্দগুলিও ব্যবহার করুন


1
থ্যাঙ্কস ম্যান, আপনি যদি আমাকে একই রকম কোডিং অংশটি
শেয়ারডপ্রাইফারেন্সের

1
@ কুমারলোডড: সর্বাধিক স্বাগত বন্ধু। যদি আপনি একইভাবে করতে চান SharedPreferencesতবে এই উদাহরণটি দেখুন
Jan কে

2
@ কুমারলোড: আপনি পেস্টবিন.কম ব্যবহারের চেষ্টা করে যা দিয়ে আমাকে উভয় শ্রেণির কোডের লিঙ্ক দিলে আমি আপনার কোডটি সম্পাদনা করব
ρяσѕρєя কে

1
@ কুমারলোড হয়েছে: এখন এই কোডটি ব্যবহার করুন এবং এটি কাজ করবে
ρяσѕρєя কে

1
@: কে: আপনি কি দয়া করে আপনার উত্তরে SharedPref ব্যবহার করে উপরের দৃশ্যের জন্য কোডটি ভাগ করে নিতে পারেন? পেস্টবিন অনেক দেশে খোলে না। এখানে এটিকে ভাগ করে নেওয়া দুর্দান্ত সাহায্য করবে, আপনাকে ধন্যবাদ।
ব্যবহারকারী1903022

26

ক্রিয়াকলাপ 1 এর সাথে ক্রিয়াকলাপ 2 শুরু করা উচিত startActivityForResult()

Activity2 ব্যবহার করা উচিত setResult()ডেটাতে ফেরত পাঠাতে Activity1

ইন Activity2 ,

@Override
public void onBackPressed() {
    String data = mEditText.getText();
    Intent intent = new Intent();
    intent.putExtra("MyData", data);
    setResult(resultcode, intent);
}

ইন Activity1 ,

onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
            String myStr=data.getStringExtra("MyData");
            mTextView.setText(myStr);
        }
    }
}

@ স্বয়াম আমি অনুমান করি কারণ আপনি ক্রিয়াকলাপ 1 এর উল্লেখ না করে স্টার্টেটিভিটিফরসাল্টের সাথে ক্রিয়াকলাপ 2 শুরু করা উচিত।
লুৎফটেকিন

1
@ লুটফিটেকিন: এটি খুব ভাল হতে পারে! এটা ইশারা জন্য ধন্যবাদ! আমার উত্তর সম্পাদনা। :)
স্বয়াম

17

আমি প্রবেশ করার সময় অন্যান্য উত্তরগুলি কাজ করছে setResultনা onBackPressed। সুপারকে কল করা onBackPressedএবং finishম্যানুয়ালি কল করা সমস্যার সমাধান করে:

@Override
public void onBackPressed() {
    //super.onBackPressed();
    Intent i = new Intent();
    i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded);
    setResult(RESULT_OK, i);
    finish();
}

এবং প্রথম ক্রিয়াকলাপে:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == QUEUE_MSG) {
        if (resultCode == RESULT_OK) {
            Serializable tmp = data.getSerializableExtra(MainActivity.EXTRA_NON_DOWNLOADED_PAGES);
            if (tmp != null)
                serializable = tmp;
        }
    }
}

6

এটিকে শুরু করার ক্রিয়াকলাপের বিকল্প হিসাবে গ্রহণ করুন B তবে মনে রাখবেন যে এই জাতীয় ক্ষেত্রে পারফরম্যান্সের ক্ষেত্রে এই পদ্ধতিটি ব্যয়বহুল হতে পারে তবে কিছু ক্ষেত্রে আপনার ব্যবহারের প্রয়োজন হতে পারে।

ক্রিয়াকলাপ 2 এ,

@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}

ক্রিয়াকলাপ 1 এ,

 @Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String  dataFromOtherAct= sp.getString("email", "no email");
} 

এটি অবজেক্টের জন্য ব্যবহার করা যাবে না (কেবল স্ট্রিং, বুলিয়ান ইত্যাদি)
FindOut_Quran

1
আমার ক্ষেত্রে আমি মেইনএ্যাকটিভিটির একটি তালিকা আইটেম থেকে একটি ক্রিয়াকলাপ চালু করছিলাম এবং ব্যবহারকারীর তৈরি ডেটা সেই তালিকা আইটেমটিতে ফিরে পেতে চাই। এই ক্ষেত্রে আমি mContext.startActivity () ব্যবহার করছিলাম এমন ক্ষেত্রে startActivityForResult () আমার কাছে উপলব্ধ ছিল না। @ কেটম্যানকো উদাহরণটি এখানে প্রায় সহায়ক কাজ ছিল।
18:37

আমার জন্য এটি একটি খারাপ নির্বাচন। অ্যাকশনফরআরসাল্ট উপস্থিত
মার্লোনপ্যা

2

এটি আপনার প্রথম ক্রিয়াকলাপ 1।

public class Activity1 extends Activity{
private int mRequestCode = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(this, Activity2.class);
    startActivityForResult(intent, mRequestCode);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == mRequestCode && resultCode == RESULT_OK){
        String editTextString = data.getStringExtra("editText");
    }
}
}

এখান থেকে আপনি স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট (এমরেউকোস্টকোড, অ্যাক্টিভিটি 2.class) ব্যবহার করে আপনার ক্রিয়াকলাপ 2 কোডটি শুরু করছেন ;

এখন এটি আপনার দ্বিতীয় ক্রিয়াকলাপ, নামটি অ্যাক্টিভিটি 2

public class Activity2 extends Activity {
private EditText mEditText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //mEditText = (EditText)findViewById(R.id.edit_text);

    Intent intent = new Intent();
    intent.putExtra("editText", mEditText.getText().toString());
    setResult(RESULT_OK, intent);
}

}

এখন আপনি যখন আপনার দ্বিতীয় ক্রিয়াকলাপটি সম্পন্ন করেছেন তারপরে আপনি setResult () পদ্ধতিটি কল করেন, onBackPress () থেকে বা যে কোনও বোতাম ক্লিক করে যখন আপনার Activity2 ধ্বংস হবে তখন আপনার কার্যকলাপ 1 এর কল ব্যাক পদ্ধতিতেঅ্যাক্টিভিটিস রিসাল্ট () সেখান থেকে কল করবে আপনি উদ্দেশ্য থেকে আপনার ডেটা পেতে পারেন ..

আশা করি এটি আপনাকে সাহায্য করবে ... :)


2

এগুলো পড়াে:

  1. অ্যাক্টিভিটি রেজাল্ট () এ ফলাফল ফেরান
  2. একটি কথিত ক্রিয়াকলাপ থেকে ফলাফল আনতে হচ্ছে - নতুনদের জন্য অ্যান্ড্রয়েড টিউটোরিয়াল

এই নিবন্ধগুলি অ্যান্ড্রয়েডে দুটি ক্রিয়াকলাপের মধ্যে ডেটা কীভাবে পাস করবেন তা বুঝতে সহায়তা করবে।


2

আপনার ফার্স্টঅ্যাক্টিভিটি থেকে স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট () পদ্ধতিটি ব্যবহার করে সেকেন্ডএকটিভিটি কল করুন।

উদাহরণ স্বরূপ:

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

আপনার সেকেন্ডঅ্যাক্টিভিটিতে ডেটা সেট করুন যা আপনি ফার্স্টঅ্যাক্টিভিটিতে ফিরে যেতে চান। আপনি যদি ফিরে আসতে চান না, কোনও সেট করবেন না।

উদাহরণস্বরূপ: দ্বিতীয় কার্যকলাপে আপনি যদি ডেটা ফেরত পাঠাতে চান:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

আপনি যদি ডেটা ফেরত দিতে না চান:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

এখন আপনার ফার্স্টঅ্যাক্টিভিটি ক্লাসে onActivityResult () পদ্ধতির জন্য নিম্নলিখিত কোডটি লিখুন।

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}

1

টিএল; ডিআর ব্যবহার Activity.startActivityForResult

দীর্ঘ উত্তর:

আপনার অ্যান্ড্রয়েড বিকাশকারী ডকুমেন্টেশন পড়ে শুরু করা উচিত। বিশেষত আপনার প্রশ্নের বিষয় ডকুমেন্টেশনের Starting Activities and Getting Resultsবিভাগে আচ্ছাদিত Activity

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

তবে, আপনি যদি বিকল্পের সন্ধান করছেন তবে এই এসও প্রশ্নটি পড়ুনstartActivityForResultsটুকরো টুকরো টুকরো দিয়ে কীভাবে ব্যবহার করা যায় সে সম্পর্কে এটি একটি ভাল আলোচনা , পাশাপাশি ক্রিয়াকলাপগুলির মধ্যে ডেটা পাস করার জন্য দম্পতি appro


0

এবং আমি, তাই আমি এই কাজ করেছি প্রথম আমি একটি তৈরি করেছি একটি বিষয় যা আমি একটি নরম বাটন যা আমি বানিয়ে রেখেছে এবং softKey যা প্রতি Android ডিভাইস এর ডিফল্ট হয় পাঠানো এটির ডাটা টাইপ করতে চেয়েছিলেন আছে, Intentআমার "এ" Activity:

            Intent intent = new Intent();
            intent.setClass(context, _AddNewEmployee.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivityForResult(intent, 6969);
            setResult(60);

তারপরে আমার দ্বিতীয় ক্রিয়াকলাপে, আমি আমার "বি" তে একটি ক্ষেত্র ঘোষণা করেছি Activity:

private static int resultCode = 40;

তারপরে আমি সফলভাবে আমার অনুরোধ করার পরে বা যখনই আমি "এ" ক্রিয়াকলাপটি বলতে চাইছিলাম যে এখানে এই কাজটি সফলভাবে সম্পন্ন হয়েছে ফলাফলের কোডের মানকে আমি "এ" Activityতে বলেছি যা আমার ক্ষেত্রে "60" এবং তারপর:

private void backToSearchActivityAndRequest() {
    Intent data = new Intent();
    data.putExtra("PhoneNumber", employeePhoneNumber);
    setResult(resultCode, data);
    finish();
}

@Override
public void onBackPressed() {
    backToSearchActivityAndRequest();
}

PS: Superআপনি যদি এটি সঠিকভাবে কাজ করতে চান তবে অনব্যাকপ্রেসড পদ্ধতিটি থেকে অপসারণের বিষয়টি মনে রাখবেন ।

তারপরে onActivityResultআমার "এ" ক্রিয়াকলাপে আমারও পদ্ধতিটি কল করা উচিত :

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 6969 && resultCode == 60) {
            if (data != null) {
                    user_mobile = data.getStringExtra("PhoneNumber");
                    numberTextField.setText(user_mobile);
                    getEmployeeByNumber();
            }
        }
    }

এটিই, আশা করি এটি আপনাকে সাহায্য করবে। #HappyCoding;

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.