3
votes

Comment passer des données entre des fragments dans FragmentPagerAdapter

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) {
            }
        });
    }
}


5 commentaires

Utilisez ViewModel info


Pouvez-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.


3 Réponses :


1
votes

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


0 commentaires

0
votes

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
}


10 commentaires

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?



0
votes

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) {
        }
    });
}
}


5 commentaires

@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