Как использовать onActivityForResult из одного действия в другом действии - PullRequest
0 голосов
/ 03 января 2019

В настоящее время я добавляю больше возможностей в проект github для личного использования. Мне нужно создать список приложений, которые будут отображаться в виде сетки: 1. Написание имени пакета самостоятельно (эта функциональность уже существовала) или 2. Выбор из списка приложений (чего я хочу добиться) - все функции реализованы в ChooserActivity с помощью ChooserAdapter.

Что решило бы мою проблему, так это передать информацию в MainActivity и вызвать его метод onActivityResult, так как есть много вещей, которые я не могу скопировать и вставить. Для clickListener (для каждого элемента вида сетки) я создал интерфейс OnItemClickListener в ChooserAdapter и переопределил его в ChooserActivity.

ChooserActivity:

    class ChooserActivity : BaseActivity(), ChooserAdapter.OnItemClickListener {
private val backButton: FloatingActionButton by bindView(R.id.back_button_2)

override fun onItemClick(app: ApplicationInfo?) {
    val intent = EditorActivity.IntentBuilder(context)
            .build()
    startActivityForResult(intent, 1)
}


public override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
    Toast.makeText(this, "onActivityResult called ...", Toast.LENGTH_SHORT).show()
    // !!!!!!
    MainActivity().onActivityResult(requestCode, resultCode, intent)
    //How can I write something similar to this to solve my problem?
}

ChooserAdapter:

    public class ChooserAdapter extends RecyclerView.Adapter<ChooserAdapter.ChooserHolder>{

private List<ApplicationInfo> listOfApps;
private Context mContext;
private PackageManager pm;
private OnItemClickListener listener;


public ChooserAdapter(@NonNull Context context, List<ApplicationInfo> list, OnItemClickListener l) {
    this.listOfApps = list;
    this.mContext = context;
    this.pm = context.getPackageManager();
    this.listener =
            new ChooserAdapter.OnItemClickListener(){
        @Override
        public void onItemClick(ApplicationInfo app){
            try{
                Intent intent = (new EditorActivity.IntentBuilder(mContext)).build();
                ((ChooserActivity)mContext).startActivityForResult(intent, 2);
            }catch (Exception e){
                Toast.makeText(mContext, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
    };
}

public class ChooserHolder extends RecyclerView.ViewHolder{
     //stuff not useful to be shown
}}

Результат приведенного выше кода привел к тому, что не использовался требуемый MainActivity (). OnActivityResult (...), а был метод ChooserActivity.

1 Ответ

0 голосов
/ 03 января 2019

Вы должны начать ChooserActivity с startActivityForResult() с MainActivity, а затем передать результат следующим образом EditorActivity -> ChooserActivity -> MainActivity

class ChooserActivity : BaseActivity(), ChooserAdapter.OnItemClickListener {
    ....
    public override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
       Toast.makeText(this, "onActivityResult called ...", Toast.LENGTH_SHORT).show()
       setResult(Activity.RESULT_OK, intent)
       finish()
    }
    ....
}

Переопределить onActivityResult(...) в MainActivity и обработать результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...