Pour mon projet académique, je souhaite créer une application avec 4 onglets. Le premier affichera les jeux récents ajoutés à une liste, le second sera un formulaire de recherche, le troisième affichera le résultat de la recherche et le dernier affichera les détails. J'ai actuellement créé le code pour TabView
et les 4 onglets. Le problème est que je veux effectuer une recherche pour obtenir les éléments que j'ai dans une liste qui répondent aux critères de recherche sur le fragment 2, mais je ne sais pas comment passer les données du fragment 2 (données textView et spinner) au fragment 3. Mon code est le suivant:
MainActivity.java
:
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private EditText textAuthor; private EditText textTitle; private EditText textGenre; private Button buttonSearch; private Spinner spinnerGenre; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DataStore.Init(getApplicationContext()); textAuthor = findViewById(R.id.editTextAuthor); textTitle= findViewById(R.id.editTextAuthor); buttonSearch = findViewById(R.id.buttonSearch); spinnerGenre = (Spinner) findViewById(R.id.spinnerGenre); ArrayAdapter<CharSequence> genreAdapter = ArrayAdapter.createFromResource( this, R.array.book_genres, android.R.layout.simple_spinner_item ); genreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerGenre.setAdapter(genreAdapter); buttonSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String filterAuthor = textAuthor.getText().toString(); String filterTitle = textTitle.getText().toString(); int filterGenreId = spinnerGenre.getSelectedItemPosition(); Intent intent = new Intent(MainActivity.this, ListActivity.class); intent.putExtra("AUTHOR", filterAuthor); intent.putExtra("TITLE", filterTitle); intent.putExtra("GENREID", filterGenreId); startActivity(intent); } }); } }
TabPagerAdapter.java
p >
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; public class ListActivity extends AppCompatActivity { private TextView textViewInfo; private ListView listViewBooks; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); // Animation when this Activity appears overridePendingTransition(R.anim.pull_in_from_right, R.anim.hold); // Get user filters from Intent Intent intent = getIntent(); String filterAuthor = intent.getStringExtra("AUTHOR"); String filterTitle = intent.getStringExtra("TITLE"); int filterGenreId = intent.getIntExtra("GENREID", 0); findViews(); // Show user filters for information String message = String.format("Author: %s\nTitle: %s\nGenreId: %d", filterAuthor, filterTitle, filterGenreId); textViewInfo.setText(message); DataStore.LoadBooks(filterAuthor, filterTitle, filterGenreId); //Complex Object Binding ListAdapter booksAdapter = new SimpleAdapter( this, DataStore.Books, R.layout.list_item, new String[]{DataStore.KEY_TITLE, DataStore.KEY_AUTHOR, DataStore.KEY_GENRENAME}, new int[]{R.id.book_item_title, R.id.book_item_author, R.id.book_item_genre} ); listViewBooks.setAdapter(booksAdapter); listViewBooks.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent detailsIntent = new Intent(ListActivity.this, DetailsActivity.class); detailsIntent.putExtra(DataStore.KEY_POSITION, position); startActivity(detailsIntent); } }); } @Override protected void onPause(){ overridePendingTransition(R.anim.hold, R.anim.push_out_to_right); super.onPause(); } private void findViews(){ textViewInfo = findViewById(R.id.textViewInfo); listViewBooks = findViewById(R.id.listViewBooks); } }
SearchFormFragment.java
import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.TextView; /** * A simple {@link Fragment} subclass. */ public class SearchResultsFragment extends Fragment { TextView infoTextView; ListView listViewGames; public SearchResultsFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View searchResultsView = inflater.inflate(R.layout.fragment_search_results, container, false); return searchResultsView; } private void findViews() { infoTextView = getActivity().findViewById(R.id.info_textView); listViewGames = getActivity().findViewById(R.id.games_listView); } }
SearchResultsFragment.java
p >
package gr.pliroforiki_edu.videogamedb; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; /** * A simple {@link Fragment} subclass. */ public class SearchFormFragment extends Fragment { private Button searchButton; private EditText gameTitleEditText; Spinner spinnerGenre; public SearchFormFragment() { // Required empty public constructor } @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View searchFormView = inflater.inflate(R.layout.fragment_search_form, container, false); searchButton = searchFormView.findViewById(R.id.searchButton); gameTitleEditText = searchFormView.findViewById(R.id.game_title_editText); spinnerGenre = searchFormView.findViewById(R.id.genre_spinner); ArrayAdapter<CharSequence> genreAdapter = ArrayAdapter.createFromResource( getActivity(), R.array.game_genres, android.R.layout.simple_spinner_item ); genreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerGenre.setAdapter(genreAdapter); searchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String filterGameTitle = gameTitleEditText.getText().toString(); int filterGenreId = spinnerGenre.getSelectedItemPosition(); String message = String.format("Game Title: %s\n Genre: %s", filterGameTitle, filterGenreId); Toast.makeText(getActivity(),message, Toast.LENGTH_LONG).show(); } }); // Inflate the layout for this fragment //return inflater.inflate(R.layout.fragment_search_form, container, false); return searchFormView; } }
Je souhaite archiver ce qui suit via les fragments:
ListActivity.java
import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class TabPagerAdapter extends FragmentPagerAdapter{ int tabCount; public TabPagerAdapter(FragmentManager fm, int numberOfTabs) { super(fm); this.tabCount = numberOfTabs; } @Override public Fragment getItem(int position) { switch (position) { case 0: return new HomeScreenFragment(); case 1: return new SearchFormFragment(); case 2: return new SearchResultsFragment(); case 3: return new DetailsScreenFragment(); default: return null; } } @Override public int getCount() { return tabCount; } }
Mainactivity.java
import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; import android.view.MenuInflater; import android.view.View; import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setImageResource(R.drawable.ic_search_white_24dp); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); //TabLayout function call configureTabLayout(); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu_exit: finish(); return true; case R.id.menu_settings: Toast.makeText(this, "Under Construction", Toast.LENGTH_LONG).show(); return true; default: return super.onOptionsItemSelected(item); } } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_camera) { // Handle the camera action } else if (id == R.id.nav_gallery) { } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } //Tab Layout function declaration private void configureTabLayout() { //Getting the tab layout TabLayout tabLayout = findViewById(R.id.tab_layout); //Adding Tabs tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_home_white_24dp)); tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_search_white_24dp)); tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_results_white_24dp)); tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_details_white_24dp)); //The TabPagerAdapter instance is then //assigned as the adapter for the ViewPager and the TabLayout component added //to the page change listener final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); final PagerAdapter adapter = new TabPagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(adapter); //Finally, the onTabSelectedListener is configured on the TabLayout instance and //the onTabSelected() method implemented to set the current page on the //ViewPager based on the currently selected tab number. viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); } }
3 Réponses :
Essayez ceci
transmettez la valeur entre deux fragments en utilisant le bundle
public class SearchResultsFragment extends Fragment { TextView infoTextView; ListView listViewGames; public SearchResultsFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View searchResultsView = inflater.inflate(R.layout.fragment_search_results, container, false); String value = getArguments().getString("Key"); return searchResultsView; } private void findViews(){ infoTextView = getActivity().findViewById(R.id.info_textView); listViewGames = getActivity().findViewById(R.id.games_listView); } }
dans votre onCreateView (....) de SearchResultsFragment p>
String value = getArguments().getString("Key");
import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class TabPagerAdapter extends FragmentPagerAdapter{ int tabCount; public TabPagerAdapter(FragmentManager fm, int numberOfTabs) { super(fm); this.tabCount = numberOfTabs; } @Override public Fragment getItem(int position) { switch (position) { case 0: return new HomeScreenFragment(); case 1: return new SearchFormFragment(); case 2: Fragment fragment = new SearchResultsFragment() Bundle args = new Bundle(); args.putString("Key", "Value"); fragment.setArguments(args); return fragment; case 3: return new DetailsScreenFragment(); default: return null; } } @Override public int getCount() { return tabCount; } }
hop que ça vous aide
Vous pouvez utiliser l'interface pour envoyer votre chaîne de recherche à votre activité à partir du fragment 2, et à partir de leur, vous pouvez appeler toutes les méthodes de votre fragment 3 car l'objet fragment3 sera disponible dans votre activité, vous pouvez faire performSearch () dans votre fragment3 et appelez-le depuis votre activité. Vous pouvez également utiliser quelque chose comme le bus d'événements pour éviter le code de plaque chauffante nécessaire à la configuration de l'interface.
Jetez un œil à ce référentiel de bus d'événements https://github.com/greenrobot/EventBus Enregistrez le bus d'événements où vous voulez la chaîne de recherche, dans votre cas enregistrez le bus d'événements dans Fragment3 comme ceci
EventBus.getDefault().post(searchString);
Dans votre Fragment 3, créez une fonction comme celle-ci
XXX
Revenez maintenant à fragment2 d'où vous voulez envoyer le searchString, vous devez mettre ci-dessous le code d'où vous voulez envoyer searchString, et cette searchString publiée sera reçue par le fragment 3 dans son onSearchEvent méthode
@Subscribe public void onSearchEvent(String searchString){ //you will get your search string here }
Pouvez-vous s'il vous plaît fournir un exemple de code? Je suis vraiment coincé maintenant. Je ne semble pas trouver un moyen de faire fonctionner la recherche. Mon objectif est d'effectuer une recherche sur les données json et d'afficher les résultats dans une vue de liste ou une vue de recyclage -
Si j'ai plusieurs conditions de recherche;
Quel type de conditions? Veuillez préciser.
1-3 champ de texte et 1-3 spinners. Je viens de récupérer les champs dans les variables et de les envoyer via la fonction de bus que je crée correctement;
Oui, vous pouvez également envoyer des objets complets, par exemple: Vous voulez envoyer le nom d'objet entier myObject de la classe MyObject à partir de fragment3, vous pouvez le faire en appelant EventBus.getDefault (). Post (searchString) mais maintenant pour recevoir cet objet dans fragment2 vous devez changer le type de paramètre de la fonction searchEvent comme ceci @Subscribe public void searchEvent (objet MyObject) {}
comment appeler l'objet dans mon fragment de destination ?? onCreateView?
Lorsque vous publiez l'événement à partir du fragment source, votre fragment de destination recevra cet événement à l'intérieur de la méthode qui est annoté par @Subscribe et a le même type de paramètre que celui de votre élément publié, donc si vous publiez une chaîne à partir de la source, vous l'obtiendrez dans la destination à l'intérieur de cette fonction [at_the_rate] Subscribe public void anyname (String message) {// vous pouvez gérer le message ici}, il en va de même avec object. vous devez créer une méthode dans la destination [at_the_rate] Subscribe void anyName (Object object) {// ici, vous pouvez gérer}.
je comprends cela et j'ai créé le EventBus.getDefault (). post (new MessageEvent (searchString)); mais comment puis-je utiliser cela sur onCreateView? ou je manque vraiment quelque chose ici. je vous remercie encore pour votre temps.
Vous ne l'utiliserez pas dans onCreateView, votre fragment de destination devrait déjà être démarré avant de recevoir des événements, si vous voulez ouvrir votre fragment avec des données, vous pouvez le faire simplement en utilisant des arguments.
tout guide comment faire cela?
Il existe de nombreuses façons de transmettre des objets / valeurs entre les fragments. Dans votre cas, la solution la plus simple serait de déléguer ces valeurs à la holding Activity
ie MainActivity
.
MainActivity :
import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.TextView; /** * A simple {@link Fragment} subclass. */ public class SearchResultsFragment extends Fragment { TextView infoTextView; ListView listViewGames; String filterGameTitle; int filterGenreId; public SearchResultsFragment() { // Required empty public constructor } @Override public void onAttach(Context context) { filterGameTitle = ((MainActivity)getActivity()).filterGameTitle; filterGenreId = ((MainActivity)getActivity()).filterGenreId; super.onAttach(context); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View searchResultsView = inflater.inflate(R.layout.fragment_search_results, container, false); return searchResultsView; } private void findViews() { infoTextView = getActivity().findViewById(R.id.info_textView); listViewGames = getActivity().findViewById(R.id.games_listView); } }
SearchFormFragment:
import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; /** * A simple {@link Fragment} subclass. */ public class SearchFormFragment extends Fragment { private Button searchButton; private EditText gameTitleEditText; Spinner spinnerGenre; public SearchFormFragment() { // Required empty public constructor } @Override public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View searchFormView = inflater.inflate(R.layout.fragment_search_form, container, false); searchButton = searchFormView.findViewById(R.id.searchButton); gameTitleEditText = searchFormView.findViewById(R.id.game_title_editText); spinnerGenre = searchFormView.findViewById(R.id.genre_spinner); ArrayAdapter<CharSequence> genreAdapter = ArrayAdapter.createFromResource( getActivity(), R.array.game_genres, android.R.layout.simple_spinner_item ); genreAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerGenre.setAdapter(genreAdapter); searchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String filterGameTitle = gameTitleEditText.getText().toString(); int filterGenreId = spinnerGenre.getSelectedItemPosition(); ((MainActivity)getActivity()).filterGameTitle = filterGameTitle; ((MainActivity)getActivity()).filterGenreId = filterGenreId; String message = String.format("Game Title: %s\n Genre: %s", filterGameTitle, filterGenreId); Toast.makeText(getActivity(),message, Toast.LENGTH_LONG).show(); } }); // Inflate the layout for this fragment //return inflater.inflate(R.layout.fragment_search_form, container, false); return searchFormView; } }
import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; import android.view.MenuInflater; import android.view.View; import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { //these will hold your values String filterGameTitle; int filterGenreId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setImageResource(R.drawable.ic_search_white_24dp); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); //TabLayout function call configureTabLayout(); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu_exit: finish(); return true; case R.id.menu_settings: Toast.makeText(this, "Under Construction", Toast.LENGTH_LONG).show(); return true; default: return super.onOptionsItemSelected(item); } } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_camera) { // Handle the camera action } else if (id == R.id.nav_gallery) { } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } //Tab Layout function declaration private void configureTabLayout() { //Getting the tab layout TabLayout tabLayout = findViewById(R.id.tab_layout); //Adding Tabs tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_home_white_24dp)); tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_search_white_24dp)); tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_results_white_24dp)); tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_details_white_24dp)); //The TabPagerAdapter instance is then //assigned as the adapter for the ViewPager and the TabLayout component added //to the page change listener final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); final PagerAdapter adapter = new TabPagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(adapter); //Finally, the onTabSelectedListener is configured on the TabLayout instance and //the onTabSelected() method implemented to set the current page on the //ViewPager based on the currently selected tab number. viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); } }
@TasosKaratzoglou vérifie ma mise à jour du SearchResultFragment J'ai utilisé la méthode onAttach pour m'assurer de ne pas accéder à l'activité tant que le fragment n'y est pas attaché.
OnAttach Android Studio dit qu'il est obsolète
Vérifiez le nouveau onAttach
Vous avez Skype ou un courrier électronique pour vous envoyer mon dépôt GitHub privé? Ça n'a pas l'air de marcher. Je suis vraiment coincé maintenant. Je ne semble pas trouver un moyen de faire fonctionner la recherche. Mon objectif est d'effectuer une recherche sur les données json et d'afficher les résultats dans une vue de liste ou une vue de recyclage
continuons cette discussion dans le chat
Utilisez
ViewModel
infoPouvez-vous me donner un exemple de code?
pourquoi devrais-je? C'est dans la réponse fournie
comme je peux le voir, j'ai besoin de fournir une classe de bridge, non?
... Vous devez créer ViewPagerViewHolder qui contiendra des données. Ensuite, vous pouvez utiliser la même instance de ViewModel pour partager des données. La réponse acceptée est plus que suffisante.