2017-03-23 2 views
0

Ich habe Projekt mit dem Fragment und mit Navigationsleiste enthält die Navigationsleiste 4 Menü: 1. Empfehlung 2. LuxWoher weiß man, welches Fragment in Android sichtbar ist?

Das Problem ist, wenn ich in Lux Menü-Taste i dann zurückgedrückt es auf die Empfehlung gehen sollte (Welches ist das Hauptmenü). Aber wenn ich in der Empfehlung und ich drückte Taste, sollte es die App zu schließen, wie zu erkennen, ob ich im Empfehlungsmenü war?

Hauptaktivität

public class MainActivity extends AppCompatActivity{ 
DrawerLayout mDrawerLayout; 
NavigationView mNavigationView; 
FragmentManager mFragmentManager; 
FragmentTransaction mFragmentTransaction; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    /** 
    *Setup the DrawerLayout and NavigationView 
    */ 

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ; 

/** 
* Lets inflate the very first fragment 
* Here , we are inflating the TabFragment as the first Fragment 
*/ 

mFragmentManager = getSupportFragmentManager(); 
mFragmentTransaction = mFragmentManager.beginTransaction(); 
mFragmentTransaction.replace(R.id.containerView,new Recommendation()).commit(); 
/** 
* Setup click events on the Navigation View Items. 
*/ 

mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
    @Override 
    public boolean onNavigationItemSelected(MenuItem menuItem) { 
     mDrawerLayout.closeDrawers(); 



     if (menuItem.getItemId() == R.id.nav_item_lux_level_recomen) { 
      FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.containerView,new Recommendation()).commit(); 

     } 

     if (menuItem.getItemId() == R.id.nav_item_room_index_calc) { 
      FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
      xfragmentTransaction.replace(R.id.containerView,new RoomIndex()).commit(); 
     } 

     if (menuItem.getItemId() == R.id.nav_item_utilization_factor_calc) { 
      FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
      xfragmentTransaction.replace(R.id.containerView,new UtilizationFactorCalculator()).commit(); 
     } 

     if (menuItem.getItemId() == R.id.nav_item_conversions) { 
      FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
      xfragmentTransaction.replace(R.id.containerView,new Conversion()).commit(); 
     } 
     if (menuItem.getItemId() == R.id.nav_item_lux) { 
      FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction(); 
      xfragmentTransaction.replace(R.id.containerView,new LuxSensor()).commit(); 
     } 


     return false; 
    } 

}); 

/** 
* Setup Drawer Toggle of the Toolbar 
*/ 

android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); 
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, toolbar,R.string.app_name, 
     R.string.app_name); 

mDrawerLayout.setDrawerListener(mDrawerToggle); 

mDrawerToggle.syncState(); 
} 

Lux Menü

public class LuxSensor extends Fragment { 
TextView textLIGHT_available, textLIGHT_reading; 
FragmentManager mFragmentManager; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View x = inflater.inflate(R.layout.lux_sensor,null); 
    textLIGHT_reading 
      = (TextView)x.findViewById(R.id.LIGHT_reading); 

    SensorManager mySensorManager = (SensorManager)getActivity().getSystemService(Context.SENSOR_SERVICE); 

    Sensor LightSensor = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
    if(LightSensor != null){ 
     mySensorManager.registerListener(
       LightSensorListener, 
       LightSensor, 
       SensorManager.SENSOR_DELAY_NORMAL); 

    }else{ 
     textLIGHT_available.setText("Sensor.TYPE_LIGHT NOT Available"); 
    } 
    FragmentManager fm = getFragmentManager(); 

    return x; 
} 





private final SensorEventListener LightSensorListener 
     = new SensorEventListener(){ 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     if(event.sensor.getType() == Sensor.TYPE_LIGHT){ 
      textLIGHT_reading.setText(event.values[0]+" LUX"); 
     } 
    } 

}; 
+0

Ich bin sicher, Sie schauen Sie sich um Lösungen haben würde . Sie finden die Lösung [hier] (http://stackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager) und [hier] (http://stackoverflow.com)/questions/18375288/fragment-lifecycle-welche-Methode-wird-aufgerufen-show-hide). – Geek

Antwort

0

Fügen Sie eine globale Variable mCurrentFrag in Ihnen activity wie diese

private Fragment mCurrentFrag; 

und Wenn Sie jedes Fragment von Ihnen ersetzen, weisen Sie auf diese Variable, zum Beispiel:

if (menuItem.getItemId() == R.id.nav_item_lux_level_recomen) { 
    FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
    Fargment recommendation = new Recommendation() 
    fragmentTransaction.replace(R.id.containerView,recommendation).commit(); 
    mCurrentFrag = recommendation; 
} 

und in onBackPressed() Check für mCurrentFrag

if(mCurrentFrag instanceof Recommendation){ 
    //close the app 
} 
0

Wenn u das Fragment hinzufügen Sie werden das Tag-System hinzufügen. "tag" wird die Identifikation für das Fragment sein.

FragmentTransaction transaction = getSupportFragmentManager() 
      .beginTransaction(); 
    transaction.replace(R.id.container_framelayout, fragment, tag); 
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    transaction.commit(); 
    getSupportFragmentManager().executePendingTransactions(); 

nun für die Prüfung des Fragments u den Code schreiben:

Fragment test = (Fragment) getSupportFragmentManager().findFragmentById(R.id.container_framelayout); 
String tag = test.getTag().toString(); 

Von diesem "Tag" kann u verstehen das Fragment jetzt offen

Verwandte Themen