2016-05-07 81 views
-2

我想要在UserActivity工具栏上显示我的城市名称..我正在MainActivity中搜索并显示我当前的城市名称...我mainactivity cityname显示在工具栏上,但我不知道如何在有用的活动中获取该名称...请帮助我。 ..如何在工具栏上获取当前城市名称?

MainActivity.java

public class MainActivity extends Activity 
    implements View.OnClickListener { 

private LocationManager locationManager=null; 
private LocationListener locationListener=null; 

private Button btnGetLocation = null; 
private EditText editLocation = null; 
private ProgressBar pb =null; 
String cityName=null; 
String addressName = null; 

private static final String TAG = "Debug"; 
private Boolean flag = false; 

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



    //if you want to lock screen for always Portrait mode 
    setRequestedOrientation(ActivityInfo 
      .SCREEN_ORIENTATION_PORTRAIT); 

    pb = (ProgressBar) findViewById(R.id.progressBar1); 
    pb.setVisibility(View.INVISIBLE); 

    editLocation = (EditText) findViewById(R.id.editTextLocation); 


    btnGetLocation = (Button) findViewById(R.id.btnLocation); 
    btnGetLocation.setOnClickListener(this); 

    locationManager = (LocationManager) 
      getSystemService(Context.LOCATION_SERVICE); 

} 

@Override 
public void onClick(View v) { 
    flag = displayGpsStatus(); 
    if (flag) { 

     Log.v(TAG, "onClick"); 

     editLocation.setText("Please!! move your device to" + 
       " see the changes in coordinates." + "\nWait.."); 

     pb.setVisibility(View.VISIBLE); 
     locationListener = new MyLocationListener(); 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, locationListener); 

    } else { 
     alertbox("Gps Status!!", "Your GPS is: OFF"); 
    } 

} 

/*----Method to Check GPS is enable or disable ----- */ 
private Boolean displayGpsStatus() { 
    ContentResolver contentResolver = getBaseContext() 
      .getContentResolver(); 
    boolean gpsStatus = Settings.Secure 
      .isLocationProviderEnabled(contentResolver, 
        LocationManager.GPS_PROVIDER); 
    if (gpsStatus) { 
     return true; 

    } else { 
     return false; 
    } 
} 

/*----------Method to create an AlertBox ------------- */ 
protected void alertbox(String title, String mymessage) { 
    final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Your Device's GPS is Disable") 
      .setCancelable(false) 
      .setTitle("** Gps Status **") 
      .setPositiveButton("Gps On", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          // finish the current activity 
          // AlertBoxAdvance.this.finish(); 
          Intent intent =new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
          startActivity(intent); 
          dialog.cancel(); 
         } 
        }) 
      .setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          // cancel the dialog box 
          dialog.cancel(); 
         } 
        }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 

/*----------Listener class to get coordinates ------------- */ 
private class MyLocationListener implements LocationListener { 
    @Override 
    public void onLocationChanged(Location loc) { 

     editLocation.setText(""); 
     pb.setVisibility(View.INVISIBLE); 

/*----------to get City-Name from coordinates ------------- */ 

     Geocoder gcd = new Geocoder(getBaseContext(), 
       Locale.getDefault()); 
     List<Address> addresses; 
     try { 
      addresses = gcd.getFromLocation(loc.getLatitude(), loc 
        .getLongitude(), 1); 
      if (addresses.size() > 0) 

       System.out.println(addresses.get(0).getLocality()); 
      cityName = addresses.get(0).getLocality(); 
      addressName = addresses.get(0).getSubLocality(); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      toolbar.setTitle(cityName); 
      setActionBar(toolbar); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     //editLocation.setText(longitude+"\n"+latitude + "\n\nMy Current Address is: "+addressName+", "+cityName); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onStatusChanged(String provider, 
           int status, Bundle extras) { 
     // TODO Auto-generated method stub 
    } 
} 

UserActivity.java

public class UserActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    *toolbar.setTitle("how i should call that cityName here");* 
    setSupportActionBar(toolbar); 


    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.setDrawerListener(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. 
    getMenuInflater().inflate(R.menu.user, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

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

}

+1

只发布相关的代码,你得到错误,需要改进等。不要发布整个代码。每个人都很难找出问题。 –

+0

兄弟我在MainActivity.java中搜索城市名称,我想在我的UserAcitivity.java(工具栏上)的城市名称 –

+0

查看答复我提供的 –

回答

0

创建一个常量类。

public class Constant { 
    public static String CITY_NAME =""; 

    public static String getCityName() { 
     return CITY_NAME; 
    } 

    public static void setCityName(String cityName) { 
     Constant.CITY_NAME = cityName; 
    } 
} 

现在,当你得到这个城市的名字,你在这里保存这个城市的名字一样

Constant.setCityName("ANY"); 

而当你想从任何类或任何活动获取城市名称,你可以从这里像这样得到它

Constant.getCityName(); 

这个名字是存储直到你的应用程序打开。所以不需要传递每个活动的意图。您可以通过这种方式从您的应用程序的任何地方获取城市名称

而你的问题解决方案

MainActivity

toolbar.setTitle(cityName); 
Constant.setCityName(cityName); 
setActionBar(toolbar); 

UserActivity

toolbar.setTitle("how i should call that cityName here"); 

改变这一行

toolbar.setTitle(Constant.getCityName()); 
+0

谢谢兄弟你的帮助..我想更多的一件事你可以请帮助...我希望我的GPS自动无需设置..我使用这个需要我来设置:(意向意图=新意图(Settings.ACTION_LOCATION_SOURCE_SETTINGS); –

+0

在这里你去http://stackoverflow.com/questions/4721449/how-can-i-enable-or-disable-the-gps-programmatically-on-android –

+0

兄弟我试过你的代码太...但它显示静态的错误。 –

0

可以传递你的城市名称从MainActivityUserActivity使用意图。

当你开始你的UserActivityMainActivity,使用IntentputExtra(String, String)

例如: 在MainActivity

Intent i = new Intent(MainActivity.this, UserActivity.class); 
i.putExtra("Title", yourCityName); 
startActivity(i); 

而且在UserActivity

String cityName = getIntent().getExtra("Title", "Default City Name"); 
toolbar.setTitle(cityName); 

或者你可以做

getSupportActionBar().setTitle(cityName); 

尝试

setSupportActionBar(toolbar); 
+0

无法解析.getExtra .... –

+0

无法解析.getExtra .... –

-1

采取的cityName在MainActivity静态

public static String cityName=null; //store in this what ever you whant 

然后从UserActivity

得到它
String city=MainActivity.cityName; 
+0

这将创建问题,如果MainActivity是关闭和抛出异常。我的意思是活动不在活动堆栈中,用户已完成该活动。你怎么看? –

+0

谢谢兄弟:)它的作品! –

+0

我想更多的一件事你可以请帮助...我希望我的GPS自动无需设置..我使用这个需要我设置:( 意图intent =新的意图(Settings.ACTION_LOCATION_SOURCE_SETTINGS); –

0

您可以使用共享偏好像这样保存您的城市名称:

SharedPreferences sharedpreferences = getSharedPreferences("your preference name", Context.MODE_PRIVATE); Editor editor = sharedpreferences.edit(); editor.putString("cityname", your city name); editor.commit(); 

现在,无论你想使用你的城市名称:

SharedPreferences sharedpreferences = getSharedPreferences("your preference name", Context.MODE_PRIVATE); String cityname=sharedpreferences.getString("cityname"); toolbar.setTitle(cityname); 
+0

sharedpreferences。getString(“城市名称 - 显示城市名称错误”); –

+0

在putstring中设置专有名称不要在城市和名称之间放置空格,并从相同名称获取字符串。希望它能工作 –

+0

我得到cityname形式的GPS ...所以我把我的字符串名称在那里.. 像.putString(“cityname”,cityName);这里cityName是我的字符串名称,我存储从gps –

相关问题