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




Не вызывайте 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);
}
}
И заработает, тестировал, после этого контакт появляется.
братан, мне нужно отображать данные в представлении ресайклера, но после выбора контактов они не будут отображаться в представлении ресайклера, когда я использую фрагмент. что мне делать?
@VectorArora Я показал, как его использовать в своем ответе. Удалите эту строку super.onActivityResult(requestCode, resultCode, data), прочтите мой ответ, где она объяснена.
ни один человек не работает, вы можете получить код и попробовать, пожалуйста.
@VectorArora, можете ли вы подтвердить, что onActivityResult во фрагменте не вызывается? Ставьте Log или Toast.
да, это не называется я использовал журнал в том
@VectorArora, значит, в вашем MainActivity вы добавили onActivityResult с super, а во фрагменте вы удалили строку super?
но что касается плавающей кнопки верхнего кода
@VectorArora Я не говорю о плавающей кнопке, в вашем MainActivity просто переопределите onActivityResult и поставьте super.onActivityResult(requestCode, resultCode, data) и все. А в вашем фрагменте оставьте все как есть, а только удалите строку super.onActivityResult(requestCode, resultCode, data)
пожалуйста, вы можете увидеть код один раз ??
@VectorArora хорошо
могу я получить твой идентификатор в фейсбуке?
@VectorArora можешь выложить свой код здесь, проще
подожди, я дам тебе ссылку на github, тебе это нормально?
@VectorArora конечно
пожалуйста, взгляните на это и помогите мне, пожалуйста ..
вот библиотека MultipleContactPicker, которую я интегрировал в проект .. github.com/broakenmedia/MultiContactPicker
ты видел мое приложение ... пожалуйста
@VectorArora не волнуйся, я посмотрю, меня не было
пожалуйста, сделайте это как можно скорее и скажите мне ,,,,
@VectorArora вам нужно предоставить доступ
что и как мне делать, ты можешь мне сказать? Я дал на это контактное разрешение ...
@VectorArora У меня нет разрешения на доступ к вашему Google Диску. Вы можете внимательно прочитать мой ответ и повторить то, что я там сказал?
извини, чувак, я дал разрешение на доступ, пожалуйста, проверьте
@VectorArora Проблема решена, проверьте отредактированный ответ
спасибо, чувак ...
@VectorArora рад, что смог помочь :) вы можете отметить вопрос как принятый, нажав на галочку рядом с ним. удачи!
Не уверен, какой MultiContactPicker вы используете, но если это: https://github.com/broakenmedia/MultiContactPicker, похоже, вы можете / должны передать фрагмент при создании экземпляра Builder. Так что измените эту строку:
new MultiContactPicker.Builder(getActivity())
к:
new MultiContactPicker.Builder(this)
братан, мне нужно отображать данные в представлении ресайклера, но после выбора контактов они не будут отображаться в представлении ресайклера, когда я использую фрагмент. что мне делать?
пожалуйста, помогите мне, если кто-то хочет, чтобы мой код попробовал, я могу предоставить, но пожалуйста, помогите мне
Спасибо за ответ, это была половина проблемы :)
@Override public void onActivityResult (int requestCode, int resultCode, данные намерения) {super.onActivityResult (requestCode, resultCode, data); } ------------- как мне использовать это во фрагменте, этот код работает с активностью, но не во фрагменте -------------------- ----