Замена содержимого фрагмента с помощью элемента навигационной панели щелкните - PullRequest
0 голосов
/ 23 октября 2018

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

То, чего я хочу добиться, - когда пользователь щелкает элемент меню ящика, фрагмент должен отображать данные в соответствии с щелчком мыши, для простоты - просто название пункта меню во фрагменте.

При использовании одного фрагмента я хочу иметь различное содержимое с другим щелчком по пункту меню.

Элементы меню в Навигационном ящике создаются динамически, как показано для отображения изБД и количество пунктов меню могут быть переменными.

РЕДАКТИРОВАТЬ: NavigationDrawerActivity

public class NavigationActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

DrawerLayout drawer;
FragmentManager fragmentManager;
Fragment testFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_navigation);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    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();
        }
    });

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

    final Menu menu = navigationView.getMenu();
    for (int i = 1; i <= 10; i++) {
        menu.add(0,i,0,"Set "+ i);
    }

    fragmentManager = getSupportFragmentManager();
    testFragment = new TestFragment();

}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();


    for (int i = 0; i<10; i++) {
            // Handle the camera action
        if (id == i){
            Bundle bundle = new Bundle();
            bundle.putString("SET_ID", "this is test"+i);
            // set Fragmentclass Arguments
            testFragment.setArguments(bundle);
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.frame_container, testFragment).commit();

        }

    }


    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

}

TestFragment

public class TestFragment extends Fragment {

TextView textView;

public TestFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_test, container, false);
    String idValue = getArguments().getString("SET_ID");
    Log.d("TEST_VALUE***", idValue);
    textView = view.findViewById(R.id.just_Text);
    textView.setText("Set id is: "+idValue);


    return view;
}

}

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Попробуйте добавить строку ниже onNavigationItemSelected для lopp

testFragment = new TestFragment(); // this line

Пример:

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();


for (int i = 0; i<10; i++) {
        // Handle the camera action
    if (id == i){
        Bundle bundle = new Bundle();
        bundle.putString("SET_ID", "this is test"+i);
        // set Fragmentclass Arguments
        testFragment = new TestFragment(); // add this line in your code.
        testFragment.setArguments(bundle);
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.frame_container, testFragment).commit();
    }
}

Проверьте, может ли это работать ...

0 голосов
/ 23 октября 2018
 @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
        if (id == R.id.btn1) {
       // Handle the btn1 action
        } else if (id == R.id.btn2) {

            txt_fragment.settext("...");
         or whatever you want to change!
            // Handle the btn2 action

        } else if (id == R.id....) {


        } 
            .
            .
            .

        drawer.closeDrawer(GravityCompat.END);
        return true;
    }
...