2012-03-09 2 views
0

Я довольно новичок в Android и Java и надеюсь, что вы сможете мне помочь.Доступ к TextView из внешнего класса

У меня есть вложенный класс:

public class MyLocationListener implements LocationListener 

    { 


    public void onLocationChanged(Location loc) 

    { 
     loc.getLatitude(); 
     loc.getLongitude(); 

     String loTude = "Longitude:" + loc.getLongitude(); 
     String laTude = "Latitude: " + loc.getLatitude(); 

     ((TextView) findViewById(R.id.tvLong)).setText(loTude); 
     ((TextView) findViewById(R.id.tvLat)).setText(laTude); 



    } 

Как я могу получить доступ к двум Струны loTude и laTude от моего внешнего класса? Нужно ли мне возвращать их из метода через объект, или есть ли другой способ?

+0

написать метод в этом классе, что будет возвращать строку- s через объект для любого класса, который вы хотите, или напишите 2 метода, которые будут возвращать loTude и laTude соответственно :) – rohit

ответ

1

Если вложенный класс затем сделать Глобальный объект TextView вроде как ....

Class MyActivity extends Activity{ 
     public TextView tvLat,tvLng; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      tvLat=(TextView) findViewById(R.id.tvLong); 
      tvLng=(TextView) findViewById(R.id.tvLat); 

    } 
    public class MyLocationListener implements LocationListener 
     { 
      public void onLocationChanged(Location loc) 
       { 
      loc.getLatitude(); 
      loc.getLongitude(); 

      String loTude = "Longitude:" + loc.getLongitude(); 
      String laTude = "Latitude: " + loc.getLatitude(); 

      tvLat.setText(loTude); 
      tvLng.setText(laTude); 

     } 
    } 
} 
+0

Это сработало :) Спасибо – kincaid

0

вы можете сделать это, передав ссылку своей деятельности на свой собственный класс. см. ниже:

public class MyLocationListener implements LocationListener 
{ 

    private Activity myActivity; 

    public MyLocationListener(Activity act){ 
     myActivity = act; 
    } 

    public void onLocationChanged(Location loc){ 
     loc.getLatitude(); 
     loc.getLongitude(); 

     String loTude = "Longitude:" + loc.getLongitude(); 
     String laTude = "Latitude: " + loc.getLatitude(); 

     ((TextView) myActivity.findViewById(R.id.tvLong)).setText(loTude); 
     ((TextView) myActivity.findViewById(R.id.tvLat)).setText(laTude); 

    } 

} 

Это решение рекомендуется, если вы определили свой класс отдельно. В противном случае, найти свою точку зрения в OnCreate метод и просто использовать их внутри внутреннего класса

+0

лучше перевести контекст активности в конструкторе, а не в действие, и создать 2 textview с использованием этого контекста, чтобы этот класс устанавливал текст Textviews с использованием контекста – rohit

+0

извините, вы не можете сделать ** findViewById ** из 'Context'. Поэтому разумно предоставить ссылку на деятельность – waqaslam

+0

Спасибо, я тоже пробовал это, и он работает. – kincaid

0

Создать класс, как это

public class Global extends Application { 
    public static String loTude =""; 
    public static String laTude =""; 
} 

использования для строки значений

Global.loTude = "Longitude:" + loc.getLongitude(); 
Global.laTude = "Latitude: " + loc.getLatitude();