0

Ich versuche, eine BottomNavigationView zu implementieren, war bisher erfolgreich. Derzeit versuche ich die Fragment-zu-Fragment-Bewegung zu implementieren, die auch erfolgreich ist, aber irgendwie, wenn ich von einem Fragment [Radio] zu einem anderen [Stream] gehe, sollte die Navigationsleiste das Icon [stream] markieren, aber es ist nicht möglich Ich kann die Highlight-Eigenschaften durch das Fragment selbst setzen? Unten ist der Code und Snapshot meiner Anwendung:Traversing von Fragment zu Fragment BottomNavigationView-Symbol Highlight

FragmentOne

FragmentTwo

MainActivity.java

import android.support.annotation.NonNull; 
import android.support.design.widget.BottomNavigationView; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.TextView; 
import com.br.tron.bottombar.RadioFragment; 
import com.br.tron.bottombar.StreamFragment; 
import com.br.tron.bottombar.InfoFragment; 

public class MainActivity extends AppCompatActivity { 

    BottomNavigationView bottomNavigationView; 
    private Fragment fragment; 
    private FragmentManager fragmentManager; 

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

     fragmentManager = getSupportFragmentManager(); 
     fragment = new RadioFragment(); 
     final FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     transaction.add(R.id.main_container, fragment).commit(); 

     bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationBar); 
     bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener(){ 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

       switch (item.getItemId()) { 
        case R.id.nav_button_one: 
         fragment = new RadioFragment(); 
         break; 
        case R.id.nav_button_two: 
         fragment = new StreamFragment(); 
         break; 
        case R.id.nav_button_three: 
         fragment = new InfoFragment(); 
         break; 
       } 
       final FragmentTransaction transaction = fragmentManager.beginTransaction(); 
       transaction.replace(R.id.main_container, fragment).commit(); 
       return true; 
      } 
     }); 
    } 

    public void performStreamClick(){ 
     View view = bottomNavigationView.findViewById(R.id.main_container); 
     view.performClick(); 
    } 
} 

RadioFragment.java

import android.app.Activity; 
import android.content.Context; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 

public class RadioFragment extends Fragment implements Button.OnClickListener { 

    Button buttonman; 
    View rootView; 

    Activity a; 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 

     if (context instanceof Activity) { 
      a = (Activity) context; 
     } 
    } 

    public RadioFragment(){ 
    }; 

    @Override 
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { 

     rootView = inflater.inflate(R.layout.fragment_player, container, false); 
     buttonman = (Button)rootView.findViewById(R.id.buttonman); 
     buttonman.setOnClickListener(this); 
     return rootView; 
    } 

    @Override 
    public void onClick(View v) { 
     /*Fragment fragment = new StreamFragment(); 
     FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.main_container, fragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit();*/ 
     ((MainActivity)a).performStreamClick(); 
    } 
} 

StreamFragment.java

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.Button; 

public class StreamFragment extends Fragment { 

    public StreamFragment(){}; 

    @Override 
    public View onCreateView(final LayoutInflater inflater,final ViewGroup container,final Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_stream, container, false); 

    } 

} 

Antwort

1

Sie nicht buttonman initialisiert wurde

In RadioFragment.java

Button buttonman; 
View rootView;  
Activity a; 

@Override 
public void onAttach(Context context) { 
super.onAttach(context); 

if (context instanceof Activity){ 
    a=(Activity) context; 
} 
} 

public RadioFragment(){ 
}; 

@Override 
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { 

    rootView = inflater.inflate(R.layout.fragment_player, container, false); 
    buttonman = (Button)rootView.findViewById(R.id.yourbuttonid); // initialize here 
    buttonman.setOnClickListener(this); 
    return rootView; 

} 
@Override 
public void onClick(View v) { 
    ((MainActivity)a).performStreamClick(); 

} 

in MainActivity

public void performStreamClick(){ 
    View view = bottomNavigationView.findViewById(R.id.nav_button_two); 
view.performClick(); 
} 

Hinweis: Sie können es tun können, durch INTERFCE

Erklärung

Sie haben

hinzugefügt
Fragment fragment = new StreamFragment(); 
FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.main_container, fragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

Dies wird einfach StreamFragment in main_container framelayout schieben bottomNavigationView ohne benachrichtigen.

Hier

View view = bottomNavigationView.findViewById(R.id.nav_button_two); 
view.performClick(); 

Diese Zeile wird programmatisch klicken ausführen auf nav_button_two in bottomNavigationView .. dann alle Ereignis von bottomNavigationView behandelt .. Dann wird es das stream Symbol markieren.

+0

Das war so dumm von mir .. es funktioniert, aber die navigationView hebt nicht das Stream-Symbol, das ich auf irgendwelche Vorschläge verschieben soll? – IteratioN7T

+0

@ IterationN07, siehe hinzugefügte Antwort. Ich denke, dass Sie Position im Navigationsmenü setzen müssen, anstatt es manuell einzusetzen –

+0

@ IteratioN07, stellen Sie bottomviewnavgation auf 2 Position ein. Es wird das Streamsymbol hervorgehoben werden –

Verwandte Themen