2012-03-17 35 views
1

ユーザーの場所が変更されたときにテキストビューのテキストを設定しようとしています。 GPS部分のコードはすべて動作します。私はLog()を使ってテストしています。別のクラスからTextViewテキストを設定するには?

Logを使用する代わりに、メインレイアウトに同じ情報を表示したいのですが、LocationChangedイベントが別のクラスにあるため、レイアウトにアクセスできません。

public class mylocationlistener implements LocationListener 
{ 

@Override 
public void onLocationChanged(Location location) 
{ 
    if (location != null) 
    { 
     Log.v("kjdv", location.getLatitude() + ", " + location.getLongitude()); 
     //I would like to set a textview here, but don't have access to the object 
    } 
} 

このクラスは、ここで作成されます:

public class gps extends ListActivity implements View.OnClickListener 
{ 

@Override 
public void onCreate(Bundle icicle) 
{ 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    SetupLocationListener(); 
} 

public void SetupLocationListener() 
{ 
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    LocationListener ll = new mylocationlistener(this); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 
} 

それでは、どのように、私はonLocationChangedイベント内のテキストを設定することができmyLocationListenerクラスから?

ありがとうございます!

+1

'LocationListener'クラスを' ListActivity'の 'inner'クラスにします。 – Squonk

+0

それはオプションであることに気づいていませんでした。ありがとう。 – Kevin

+0

Androidの「アクティビティ」は、主にUI表現に使用される「特殊ケース」クラスであり、直接インスタンス化することはできないため、これは一般的な問題です。 'listeners '(' BroadcastReceiver'クラスを含む)と 'AsyncTask'クラス(例えば、ネストされたクラス)として動作するクラスを宣言することは、事柄を大幅に単純化します。それは常に最善のアプローチではなく、あなたは他の方法でそれを行うことができますが、それはより複雑になります。 – Squonk

答えて

1

2つのオプションがあります。

MisterSquonkと同じです。 LocationListenerを内部クラスとして保持し、もう1つはtextViewのオブジェクトをmylocationlistenerのコンストラクタに渡すことです。 2番目のステップでnull句を処理することを忘れないでください。

関連する問題