OnActivityResult не работает во фрагменте

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        v = inflater.inflate(R.layout.fragment_fragment_home, container, false);


        FloatingActionButton floatingActionButton=(FloatingActionButton) v.findViewById(R.id.picker);
        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (ContextCompat.checkSelfPermission(getActivity() , Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
                    new MultiContactPicker.Builder(getActivity()) //Activity/fragment context
                            .hideScrollbar(false) //Optional - default: false
                            .showTrack(true) //Optional - default: true
                            .searchIconColor(Color.WHITE) //Optional - default: White
                            .setChoiceMode(MultiContactPicker.CHOICE_MODE_MULTIPLE) //Optional - default: CHOICE_MODE_MULTIPLE
                            .handleColor(ContextCompat.getColor(getActivity() , R.color.colorPrimary)) //Optional - default: Azure Blue
                            .bubbleColor(ContextCompat.getColor(getActivity() , R.color.colorPrimary)) //Optional - default: Azure Blue
                            .bubbleTextColor(Color.WHITE) //Optional - default: White
                            .showPickerForResult(CONTACT_PICKER_REQUEST);
                }else{
                    Toast.makeText(getActivity(), "Remember to go into settings and enable the contacts permission.", Toast.LENGTH_LONG).show();
                }
            }
        });
        recyclerView=(RecyclerView) v.findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        listItems = new ArrayList<>();

        return v;
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CONTACT_PICKER_REQUEST){
            if (resultCode == RESULT_OK) {
                List<ContactResult> results = MultiContactPicker.obtainResult(data);
                for (int i=0;i<results.size();i++){
                    ListItem listItem = new ListItem(
                            "Name:  "+results.get(i).getDisplayName(),
                            "Contact No: "+results.get(i).getPhoneNumbers()
                    );
                    listItems.add(listItem);
                }

                adapter = new MyRecycleAdapter(listItems,this.getActivity());
                recyclerView.setAdapter(adapter);

                Toast.makeText(getActivity(), "MyTag"+results.get(0).getDisplayName(), Toast.LENGTH_SHORT).show();
                Log.d("MyTag", results.get(0).getDisplayName());
            } else if (resultCode == RESULT_CANCELED){
                System.out.println("User closed the picker without selecting items.");
            }
        }
    }

Как я могу использовать этот onActivityResult во фрагменте? Всякий раз, когда я запускаю этот код, наконец, «адаптер не подключен», если этот метод используется как защищенный, он работает, но во фрагменте не поддерживает защищенный, кто-нибудь может мне помочь, пожалуйста.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
250
2

Ответы 2

Не вызывайте super во фрагменте onActivityResult, удалите эту строку:

super.onActivityResult(requestCode, resultCode, data);

и переопределите onActivityResult в вашем Activity и вызовите super там:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

Обновлено:

Посмотрев на ваш проект, я понял, в чем проблема, это комбинация двух полученных вами ответов. Сначала в ваш MainActivity добавьте onActivityResult, чтобы ваш MainActivity выглядел так:

public class MainActivity extends AppCompatActivity {

    private TabLayout tabLayout;
    private ViewPager viewPager;
    private viewPagerAdapter viewPagerAdapter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        viewPagerAdapter = new viewPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(viewPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);

    }

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

Затем в вашем FragmentHome в методе floatingActionButtononClick измените эту строку:

new MultiContactPicker.Builder(getActivity())

к этой строке:

new MultiContactPicker.Builder(FragmentHome.this)

А также

  public class ViewPagerAdapter extends FragmentPagerAdapter {
      public ViewPagerAdapter(FragmentManager fragmentManager) {
          super(fragmentManager);
      }
  
      @Override
      public Fragment getItem(int position) {
          if (position == 0) return new FragmentHome();
          if (position == 1) return new FragmentRent();

          throw new IllegalStateException("Unexpected position " + position);
      }
  
      @Override
      public int getCount() {
          return 2;
      }
  
      @Override
      public CharSequence getPageTitle(int position) {
          if (position == 0) return "Home";
          if (position == 1) return "Rent";
        
          throw new IllegalStateException("Unexpected position " + position);
      }
  }

И заработает, тестировал, после этого контакт появляется.

@Override public void onActivityResult (int requestCode, int resultCode, данные намерения) {super.onActivityResult (requestCode, resultCode, data); } ------------- как мне использовать это во фрагменте, этот код работает с активностью, но не во фрагменте -------------------- ----

Vector Arora 26.05.2018 06:36

братан, мне нужно отображать данные в представлении ресайклера, но после выбора контактов они не будут отображаться в представлении ресайклера, когда я использую фрагмент. что мне делать?

Vector Arora 26.05.2018 06:48

@VectorArora Я показал, как его использовать в своем ответе. Удалите эту строку super.onActivityResult(requestCode, resultCode, data), прочтите мой ответ, где она объяснена.

Suleyman 26.05.2018 10:22

ни один человек не работает, вы можете получить код и попробовать, пожалуйста.

Vector Arora 26.05.2018 18:59

@VectorArora, можете ли вы подтвердить, что onActivityResult во фрагменте не вызывается? Ставьте Log или Toast.

Suleyman 26.05.2018 19:02

да, это не называется я использовал журнал в том

Vector Arora 26.05.2018 19:05

@VectorArora, значит, в вашем MainActivity вы добавили onActivityResult с super, а во фрагменте вы удалили строку super?

Suleyman 26.05.2018 19:08

но что касается плавающей кнопки верхнего кода

Vector Arora 26.05.2018 19:09

@VectorArora Я не говорю о плавающей кнопке, в вашем MainActivity просто переопределите onActivityResult и поставьте super.onActivityResult(requestCode, resultCode, data) и все. А в вашем фрагменте оставьте все как есть, а только удалите строку super.onActivityResult(requestCode, resultCode, data)

Suleyman 26.05.2018 19:12

пожалуйста, вы можете увидеть код один раз ??

Vector Arora 26.05.2018 19:13

@VectorArora хорошо

Suleyman 26.05.2018 19:14

могу я получить твой идентификатор в фейсбуке?

Vector Arora 26.05.2018 19:15

@VectorArora можешь выложить свой код здесь, проще

Suleyman 26.05.2018 19:16

подожди, я дам тебе ссылку на github, тебе это нормально?

Vector Arora 26.05.2018 19:18

@VectorArora конечно

Suleyman 26.05.2018 19:19

пожалуйста, взгляните на это и помогите мне, пожалуйста ..

Vector Arora 26.05.2018 19:40

вот библиотека MultipleContactPicker, которую я интегрировал в проект .. github.com/broakenmedia/MultiContactPicker

Vector Arora 26.05.2018 19:42

ты видел мое приложение ... пожалуйста

Vector Arora 27.05.2018 06:42

@VectorArora не волнуйся, я посмотрю, меня не было

Suleyman 27.05.2018 08:33

пожалуйста, сделайте это как можно скорее и скажите мне ,,,,

Vector Arora 27.05.2018 10:00

@VectorArora вам нужно предоставить доступ

Suleyman 27.05.2018 17:10

что и как мне делать, ты можешь мне сказать? Я дал на это контактное разрешение ...

Vector Arora 29.05.2018 07:36

@VectorArora У меня нет разрешения на доступ к вашему Google Диску. Вы можете внимательно прочитать мой ответ и повторить то, что я там сказал?

Suleyman 29.05.2018 09:33

извини, чувак, я дал разрешение на доступ, пожалуйста, проверьте

Vector Arora 30.05.2018 07:53

@VectorArora Проблема решена, проверьте отредактированный ответ

Suleyman 30.05.2018 14:37

спасибо, чувак ...

Vector Arora 30.05.2018 18:27

@VectorArora рад, что смог помочь :) вы можете отметить вопрос как принятый, нажав на галочку рядом с ним. удачи!

Suleyman 30.05.2018 18:29

Не уверен, какой MultiContactPicker вы используете, но если это: https://github.com/broakenmedia/MultiContactPicker, похоже, вы можете / должны передать фрагмент при создании экземпляра Builder. Так что измените эту строку:

new MultiContactPicker.Builder(getActivity())

к:

new MultiContactPicker.Builder(this)

братан, мне нужно отображать данные в представлении ресайклера, но после выбора контактов они не будут отображаться в представлении ресайклера, когда я использую фрагмент. что мне делать?

Vector Arora 26.05.2018 06:48

пожалуйста, помогите мне, если кто-то хочет, чтобы мой код попробовал, я могу предоставить, но пожалуйста, помогите мне

Vector Arora 26.05.2018 06:49

Спасибо за ответ, это была половина проблемы :)

Suleyman 30.05.2018 15:03

Другие вопросы по теме