onActivityResult () অকাল বলা হয়


92

আমি নীচে আমার কর্মকাণ্ডের ক্রিয়াকলাপ থেকে Activity(এর বংশধর PreferenceActivity) শুরু করি :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1458)
        loadInfo();
}

void showSettingsDialog()
{
    startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}

MyConfigureশ্রেণীর কোনও setResult()কল নেই। প্রকৃতপক্ষে, MyConfigureশ্রেণীর কোনও OnCreate()পছন্দ নেই যেখানে এটি পছন্দ ব্যবহার করে লোড করে addPreferencesFromResource

অ্যাক্টিভিটি চালানোর ঠিক পরে, এখন সময়ের আগেই onActivityResultডাকা হয় । 1.6 এবং 2.1 এমুলেটর পাশাপাশি 2.1 ডিভাইসে পরীক্ষিত। কোথাও কবর দেওয়ার ডাক আছে ? অথবা এই অকাল কলটি কীভাবে ব্যাখ্যা করা যেতে পারে?requestCode1458MyConfiguresetResult()PreferenceActivity


4
কোনও কার্যকলাপ সেট ফলাফল () এ শেষ হয় না, এটি শেষ হয় () এ শেষ হয় finish আপনি কি আপনার MyConfigure ক্রিয়াকলাপের onCreate পদ্ধতি প্রদর্শন করতে পারেন?
চেরিল সাইমন

ঠিক আছে, এটা না। যাইহোক, কিছু সময়ের আগে সেটরেসাল্ট () কে কল করে এবং আমি ভাবছি, এটি কী। অনক্রিটের কোডটি তুচ্ছ: পাবলিক ক্লাস মাইকনফিগুরে পছন্দক্রমকে প্রসারিত করে {@ ওভাররাইড সুরক্ষিত অকার্যকর অনক্রিট (বান্ডেল সেভড ইনস্ট্যান্সস্টেট) {সুপার.অনক্রিয়েট (সেভড ইনস্ট্যান্সস্টেট); addPreferencesFromResource (R.xML.preferences); }}
ইউজিন মায়াভস্কি 'কলব্যাক

আপনি কীভাবে জানেন যে সেটরসাল্টকে বলা হয়?
রোফকপ্ট্র এক্সসেপশন

আমি ঠিক এই জন্যই প্রশ্নটি তৈরি করেছিলাম। এটির জন্য, কেনঅ্যাক্টিভিটিস রেজাল্টকে অকালে বলা হয়।
ইউজিন মায়াভস্কি 'কলব্যাক

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

উত্তর:


254

লঞ্চ মোডটি এতে পরিবর্তন করে ঠিক করা হয়েছে singleTop:

    <activity
        android:name=".MainActivity"
        android:launchMode="singleTop">

অ্যান্ড্রয়েডে একটি বাগ / বৈশিষ্ট্য (?) রয়েছে, যা অবিলম্বে ফলাফল (যা এখনও সেট করা হয়নি) Activityহিসাবে ঘোষণা করা হয়েছে singleTask(ক্রিয়াকলাপটি চালিয়ে যাওয়া সত্ত্বেও)। আমরা পরিবর্তন করেন তাহলে launchModeথেকে পিতা বা মাতা কার্যকলাপের singleTaskজন্য singleTop, যেমন প্রত্যাশিত সবকিছু যে কাজ করছে - ফলাফলের রিপোর্ট করা হয় পরই কার্যকলাপ সমাপ্ত হয়। যদিও এই আচরণের নির্দিষ্ট ব্যাখ্যা রয়েছে (কেবলমাত্র একটি singleTaskক্রিয়াকলাপ বিদ্যমান থাকতে পারে এবং এর জন্য একাধিক ওয়েটার ঘটতে পারে), এটি এখনও আমার পক্ষে যৌক্তিক বাধা নয়।


4
মনে হচ্ছে একটি বাগ! ^^ খুব অদ্ভুত আচরণ!
ফিলিপ

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

43
লঞ্চমোড = "সিঙ্গলইনস্ট্যান্স" এছাড়াও এই আচরণের কারণ ঘটায়
ffleandro

4
দেখে মনে হচ্ছে এটি আমার পক্ষে কার্যকর হয়নি, আমি পিতামাতার ক্রিয়াকলাপে সিঙ্গেল টপ চেষ্টা করেছি তবে কোনও ফলসই হয়নি। আমি অনুরোধটি এখন সঠিক মানটি দেখায় তবে ফলাফলটি সর্বদা 0 হয়
নিয়ন ওয়ারেজ

11
এটি কিটক্যাট ৪.৪.৪ এ ঘটে, ললিপপে ঘটে না।
সোমসুন্দরম মহেশ

18

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);কল করার আগে আমি মুছে ফেলার পরে আমার সমস্যাটি সমাধান করেছি fragment.startActivityForResult(intent, 0);


4
ধন্যবাদ! এটি আমার সমস্যার সমাধান করেছে। কোথাও এর ব্যাখ্যা আছে?
কনার হার্কনেস

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

5

আমি আমার ক্রিয়াকলাপ থেকে আমার সমস্ত কাস্টম "অ্যান্ড্রয়েড: লঞ্চমোড" সরিয়ে ফেলেছি এবং সমস্ত কিছুই মনোমুগ্ধকর মতো কাজ করে। যখন আপনি অ্যান্ড্রয়েড কী বোঝাচ্ছেন ঠিক তা জানেন না তখন এটিকে পরিবর্তন করা ভাল ধারণা নয় ... অ্যান্ড্রয়েড এভাবে কিছুটা জটিল y


1

উদ্দেশ্যটি যখন Intent.FLAG_RECEIVER_FOREGROUNDপতাকা সেট করে তখন আমার সাথে এটি ঘটেছিল ।

(হ্যাঁ, এই পতাকাটি ক্রিয়াকলাপ সম্পর্কিত নয়, তবে শটগান সমাধানের একটি পৃথক সমস্যার সমাধান হিসাবে আমার সমস্ত অভিপ্রায় এটি ছিল ))


-1

আবার মায়ার মন্তব্য অনুসারে, setResult()আপনার সমস্যার সাথে কোনও সম্পর্ক নেই। কোনও কারণে MyConfigureক্লাস নিজেই শেষ হয়ে যায় এবং যখন ঘটে তখনই PreferenceActivityধরে নেওয়া হয় যে কোনও ফলাফল হতে পারে MyConfigureকারণ আপনি কোডটি এভাবেই লিখেছিলেন।

আপনি যখন কোনও ক্রিয়াকলাপ শুরু না করে তা শুরু করার জন্য এটিও ঘটে startActivityForResult()...

সুতরাং, আমি মনে করি কেন আপনার MyConfigureক্লাসটি জোর করে শেষ করা হয়েছে তার দিকে ফোকাস করা ভাল ।


মাইকনফিগার ক্লাস শেষ হয় না, আপনার অনুমানগুলি ভুল, দুঃখিত। যদি এটি হয়ে থাকে তবে কোনও প্রশ্নই উঠবে না
ইউজিন মায়েভস্কি '
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.