سؤال

لنفترض ما يلي:

Activity A calls Search Manager
User searches, and search results are displayed in Activity B
User clicks on a list item in Activity B 
App switches back to Activity A

أنا غير قادر على التعامل مع رد الاتصال هذا من النشاط B إلى النشاط A لأنه ليس لدي نية مدير البحث (على ما أظن؟).

مدير البحث عن المكالمات (في النشاط أ)

public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.add_symbol:
            onSearchRequested(); //result of search will show Activity B
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

ارجع إلى النشاط A بعد أن حدد المستخدم عنصر قائمة

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                Quote myQuote = new Quote();
                myQuote.name = (companies.get(position).name);
                myQuote.symbol = (companies.get(position).symbol);

                //TODO: add new quote to master quote list in Main
                //TODO: serialize in Main
                //TODO: go back to last activity

                Intent myIntent = new Intent(getApplicationContext(), Main.class);
                startActivityForResult(myIntent, PICK_COMPANY_REQUEST);
            }
        });

في النشاط معالجة المكالمة مرة أخرى:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PICK_COMPANY_REQUEST) {
            if (resultCode == RESULT_OK) {
                Toast toast = Toast.makeText(getApplicationContext(), "Stock added", Toast.LENGTH_SHORT);
                toast.show();
            }
        }
    }

ال PICK_COMPANY_REQUEST لا يتم إرسالها إلى المكالمة مرة أخرى. لماذا هذا؟ أفترض لأن مدير البحث لديه النية ، وليس النشاط ب. كيف يمكنني التأكد من التذرع بذلك؟

onActivityResult () لا يسمى أبدا. لماذا ا؟

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

المحلول

أشك حقًا في ما إذا كنت بحاجة إلى استدعاء نية جديدة لنشاطك الرئيسي على onClickListener الخاص بك. نظرًا لأن النشاط موجود بالفعل هنا في المكدس ، يمكنك فقط إنهاءه

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                Quote myQuote = new Quote();
                myQuote.name = (companies.get(position).name);
                myQuote.symbol = (companies.get(position).symbol);

                //TODO: add new quote to master quote list in Main
                //TODO: serialize in Main
                //TODO: go back to last activity

               //You need to use setresult here and pass the intent
                setResult(RESULT_OK, myIntent );
                finish();
            }
        });

نصائح أخرى

لقد نشرت إجابة على ما أعتقد أنه نفس المشكلة في Android OnSearchRequested () رد الاتصال على نشاط الاتصال

السماء على حق onActivityResult لا يسمى لأن النشاط A لا يبدأ نشاط البحث عن نتيجة.

للتغلب على هذا ، جعلت النشاط A يُعرّف أيضًا بأنه التمثيل القابل للبحث (في البيان) ، بحيث يتلقى نية البحث ثم إطلاق النشاط يدويًا ب startActivityForResult, ، تمرير الاستعلام والترك النشاط B التعامل مع البحث كالمعتاد.

يمكنك رؤية ردي على الرابط أعلاه أو لدي ملف المزيد من الكتابة التفصيلية في منشور المدونة هذا.

لا يتم استدعاء onActivityResult لأن startActivityforresult لم يتم استخدامه لبدء نشاط البحث. أنا عالق في هذه المشكلة أيضًا ولم أجد حلاً بعد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top