স্টার্টঅ্যাক্টিভিটিফরালসুল্ট ব্যবহার করে কীভাবে শিশু ক্রিয়াকলাপে অনুরোধকড পাবেন?


88

আমার চারটি ক্রিয়াকলাপ রয়েছে, এ, বি, সি এবং ডি বলুন situation আমার পরিস্থিতি হ'ল বি ক্রিয়াকলাপ বি স্টার্টঅ্যাক্টিভিটি ফর রিসাল্টের মাধ্যমে শুরু করবে।

startActivityForResult(new Intent(this,B.class),ONE);

অন্য পরিস্থিতিতে আমি বি অন্যান্য পরিস্থিতিতে সঙ্গে করব। পছন্দ

 startActivityForResult(new Intent(this,B.class),TWO);

বি তে, আমাকে অনুরোধকোডের উপর নির্ভর করে সি বা ডি কল করতে হবে। উদাহরণস্বরূপ, যদি কারও সি ​​সি ডি শুরু
করতে হয় তবে চাইল্ড অ্যাক্টিভিটিতে (বি এখানে) অনুরোধ কোডটি কীভাবে চেক করতে হবে তা আমার জানতে হবে।
অন্য কথায়, আমি অনুরোধ কোডটি পেতে চাই যা কার্যকলাপ বি দিয়ে শুরু হয়েছিল B

উত্তর:


140

আপনি অতিরিক্ত লাগিয়ে অনুরোধ কোডটি পাস করতে পারেন।

intent.putExtra("requestCode", requestCode);   

অথবা আপনি যদি ব্যবহার করেছেন startActivityForResultপ্রতিটি সম্পাদনা চেয়ে অনেক বার, তারপর ভাল, আপনি যা করতে পারেন আপনার কারণে আপনাকে সেখানে কোডটির এই মত যোগ overridestartActivityForResultActivity

@Override
    public void startActivityForResult(Intent intent, int requestCode) {
        intent.putExtra("requestCode", requestCode);
        super.startActivityForResult(intent, requestCode);
    }

সুতরাং আপনার সমস্ত স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট সম্পাদনা করার দরকার নেই
আশা করি এটি আপনাকে সহায়তা করেছিল


51
কোনও শিশু ক্রিয়াকলাপের অনুরোধ কোড পাওয়ার সত্যিই কোনও উপায় নেই?
i_am_jorf

4
এখনও অবধি আমার সেরা জ্ঞান, আমি অন্য কোনও উপায় মনে করি না।
লাবিব পানামপুল্লান

17
একই জিনিসটি ভাবছিল - এটি অ্যান্ড্রয়েড এপিআইতে those জিনিসগুলির মধ্যে একটি যা কোনও যৌক্তিক ধারণা তৈরি করে না।
আর্টেম রাশাকোভস্কিই

9
startActivityForResult অন্যান্য অ্যাপ্লিকেশনগুলিতে ক্রিয়াকলাপ শুরু করতে ব্যবহার করা যেতে পারে, অনুরোধ কোড আপনার অ্যাপ্লিকেশনটির ব্যক্তিগত বিষয়। এই আলোতে এটি বোঝায় যে ইন্টেন্টের তেমন কোনও পদ্ধতি নেই এবং সঠিক ক্রিয়াকলাপটি সেটঅ্যাকশনটি যা আপনি ক্রিয়াকলাপটি করতে চান ঠিক তা পরামর্শ দিয়ে থাকে advising
ম্যাকিয়েজ বেমসিক

28

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

কোনও ক্রিয়াকলাপ শুরু করা আসলে কোনও পদ্ধতি কল করার অন্য এক রূপ। আপনি যখন কোনও পদ্ধতিতে কল করবেন তখন আপনি ফলাফলটি সিঙ্ক্রোনসিভভাবে পাবেন (ঠিক সেখানেই আপনি কল করেছেন)। এই ক্ষেত্রে আপনি কেবল সেই তথ্য দিয়ে যাচ্ছেন যে পদ্ধতিটির কাজটি করা দরকার। আপনি এটি কোথা থেকে ফোন করেছেন তা বলছেন না।

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

প্যারামিটার হিসাবে অনুরোধ কোডটি কেন পাস করা ভাল ধারণা নয় তা কিছুটা পরিষ্কার করার জন্য, উদাহরণ ক্রিয়াকলাপটি বিবেচনা করুন যা কোনও পণ্য আপনি কিনতে পারবেন তা দেখাচ্ছে showing এই ক্রিয়াকলাপে "কিনুন" এবং "লগইন" লেবেলযুক্ত দুটি বোতাম রয়েছে (আপনি বর্তমানে লগইন নেই হিসাবে) "লগইন" টিপলে "লগইন" নামের একটি ক্রিয়াকলাপ শুরু হবে যা সরবরাহিত তথ্য ব্যবহার করে ব্যবহারকারীকে লগ ইন করার চেষ্টা করবে। "কিনুন" টিপলে প্রথমে খুব একই "লগইন" ক্রিয়াকলাপ শুরু হবে এবং লগইন সফল হলে, ক্রয় ক্রিয়াকলাপটি শুরু করুন।

এখন, "লগইন" বোতামটি লগইন ক্রিয়াকলাপ শুরু করতে অনুরোধ কোড 1 ব্যবহার করে, তবে "কিনুন" বোতামটি একই অনুরোধ কোডটি ব্যবহার করতে পারে না কারণ লগইন সফল হলে এটি ভিন্ন কিছু করতে হবে। সুতরাং, "কিনুন" বোতামটি অনুরোধ কোড 2 ব্যবহার করে।

"লগইন" ক্রিয়াকলাপে আপনি দুটি আলাদা অনুরোধ কোডগুলি কোথা থেকে কল করা হয়েছিল তার উপর নির্ভর করে পেতে পারেন, তবে আপনাকে একই পদ্ধতিটি করতে হবে।

সুতরাং, আপনি যদি প্যারামিটার হিসাবে অনুরোধ কোডটি পাস করেন তবে আপনি এমন কোড দিয়ে শেষ করবেন যা বিভিন্ন অনুরোধ কোডের জন্য একই জিনিসগুলি করা দরকার যেমন:

if (requestCode == LOGIN || requestCode == BUY) {
    // ...
} else ...

আপনি অনুরোধ কোড ধ্রুবক একটি কেন্দ্রীয় অবস্থানে যেমন রিকোস্টকোডস নামে একটি শ্রেণি সঞ্চয় করে শেষ করবেন।

সংক্ষেপে, অনুরোধ কোডটি কেবলমাত্র প্রাপ্ত ফলাফলের সাথে কী করবেন তা সিদ্ধান্ত নিতে ব্যবহার করা উচিত। এইভাবে আপনি আরও মডিউলার, বজায় রাখা সহজ এবং কোড প্রসারিত করা সহজ with


4
যদি এটি সাজানোর "পরিচালক" হয় এবং আপনি একটি নির্দিষ্ট মান "অতিরিক্ত" সংরক্ষণ করা হয় "সংরক্ষণ করতে একটি অনুরোধ কোড আসতে চান What অন্য একটি অনুরোধ কোড যা একটি মানকে "পুনরুদ্ধার" করতে পারে এবং অতিরিক্ত হিসাবে ফিরে আসতে পারে তবে এই ক্রিয়াকলাপের মধ্যে তারা সম্পূর্ণরূপে পুনর্নবীকরণ, সম্পাদনা, মোছা ইত্যাদির মতো সংরক্ষিত মানগুলি পরিচালনা করতে পারে? এরকম কিছু সম্পর্কে আপনার কী ধারণা? আমি মনে করি এটি একই ক্রিয়াগুলি করতে সদৃশ কোড / ক্রিয়াকলাপগুলি প্রতিরোধ করবে।
JRomero

@ জে রোমেরো এটি করবেন না, এটি কেবল জিনিসগুলিকে জটিল করবে। কেবল সেই কার্যকারিতাটি একটি (ইউটিলিটি / সিঙ্গলটন) শ্রেণিতে রাখুন। আপনি হ্যান্ডলার এবং পরিষেবাটিও
স্যাজাবলস বেরেকজ

4
Szabolcs "এই মানটি জানার প্রয়োজন নেই" এমনকি যদি শিশুটির ক্রিয়াকলাপটিকে একটি শৃঙ্খলে পরবর্তী ক্রিয়াকলাপে মানটি প্রেরণ করতে হতে পারে। হাস্যকরভাবে, এর জন্য আমাদের আরও রিডানড্যান্ট কোড লিখতে হবে। এমন কিছুর জন্য যা আমাদের করা উচিত নয় তা পড়ার জন্য আমাদের আরও বক্তৃতা পাওয়ার মতো প্রয়োজনের দরকার নেই।
user250343

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

4
@ ইভানআর সম্ভবত আরও ভাল আর্কিটেকচার হ'ল "মাস্টার" আইটেম ক্রিয়াকলাপ পৃথক অ্যাড / এডিট ক্রিয়াকলাপগুলিতে সাবক্লাস করা। তাই কোডের ন্যূনতম পুনঃব্যবহার রয়েছে তবে প্রতিটি ক্রিয়াকলাপ স্বতন্ত্রভাবে আহ্বান করা যেতে পারে।
ডেন পাওয়েল

11

প্রবর্তক ক্রিয়াকলাপে এই জাতীয় তথ্য প্রেরণে আমি কাস্টম ইনটেন্ট অ্যাকশন ব্যবহার করে শেষ করেছি।

protected static final String ACTION_DO_C = "do_c";
protected static final String ACTION_DO_D = "do_d";

তাহলে আপনি এই মত যেতে চাই:

final Intent intent = new Intent(this,B.class)
intent.setAction(ACTION_DO_C);
startActivityForResult(intent,ONE);

এবং ক্রিয়াকলাপে B আপনি ক্রিয়াটি সহজেই পাবেন:

getIntent().getAction();

একটি মোহন মত কাজ করে, সেরা উত্তর সত্যিই। ধন্যবাদ
YvesLeBorg

0

বর্তমান ক্রিয়াকলাপ শুরু হওয়া ক্রিয়াকলাপটি পেতে আপনি getCallingActivity () ব্যবহার করতে পারেন এবং এটি শেষে প্রতিক্রিয়া কোড সহ ফলাফলের মানটি পাবেন।

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