2016-11-30 8 views
0

私はアンドロイドで最初のアプリケーションを作成しています。現在位置を取得してBroadacastレシーバにデータを送信するサービスでドロワーレイアウトを使用します。これはDashboard Fragmentの緯度と経度のテキストビューを更新するしかし、updateDashLocationが呼び出されると、私はこのエラーを受け取ります:原因:java.lang.NullPointerException:DashLatitudeのヌルオブジェクトリファレンスで仮想メソッド 'void android.widget.TextView.setText(java.lang.CharSequence)'を呼び出そうとしています。 setText(緯度);とDashLongitude.setText(経度)。フラグメント内のTextviewテキストを変更する

断片コード

public class DashboardFragment extends Fragment { 


public DashboardFragment() { 
    // Required empty public constructor 
} 

View dashboardInflatedView; 
TextView DashLatitude,DashLongitude; 
String TAG = "GPSTracker"; 

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

    Toolbar toolbar = ((MainActivity)getActivity()).toolbar; 
    toolbar.setTitle("Dashboard"); 

    dashboardInflatedView = inflater.inflate(R.layout.fragment_dashboard, container, false); 
    DashLatitude = (TextView)dashboardInflatedView.findViewById(R.id.DashLatitude); 
    DashLongitude = (TextView)dashboardInflatedView.findViewById(R.id.DashLongitude); 

    return dashboardInflatedView; 
} 

public void updateDashLocation(String latitude, String longitude){ 

    //Log.d(TAG, "Update Dashboard Location"); 
    DashLatitude.setText(latitude); 
    DashLongitude.setText(longitude); 
} 

}

どうupdateDashLocationが呼び出されたときに、私はダッシュボードのフラグメントの要素にアクセスすることができますか?

+1

フラグメントビューが作成される前にupdateDashLocationが呼び出されているように見えます – diedu

+0

あなたのビューに正しいIDがありますか? – LukeWaggoner

+0

IDは正しいです! updateDashLocationは、フラグメントの作成後に呼び出されます。私がテストを繰り返す現金を削除した後、私は原因を受け取ります:java.lang.NullPointerException:仮想メソッド 'android.view.View android.view.View.FindViewById(int)'をヌルオブジェクト参照で呼び出そうとしました.DashLatitude .setText( "test");フラグメントのonCreateView中に、テキストは正しく更新されます...何らかの方法で、私はインフレータの後で同じフラグメント内のフラグメントViewにアクセスできません!誰でも私を助けることができますか? – Cristian

答えて

0

updateDashLocationメソッドが呼び出されたときにTextViewsを宣言してください。

public class DashboardFragment extends Fragment { 

     public DashboardFragment() { 
      // Required empty public constructor 
     } 

     View dashboardInflatedView; 
     TextView DashLatitude,DashLongitude; 
     String TAG = "GPSTracker"; 

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

      Toolbar toolbar = ((MainActivity)getActivity()).toolbar; 
      toolbar.setTitle("Dashboard"); 

      dashboardInflatedView = inflater.inflate(R.layout.fragment_dashboard, container, false); 
      return dashboardInflatedView; 
     } 

     public void updateDashLocation(String latitude, String longitude){ 

      DashLatitude = (TextView)dashboardInflatedView.findViewById(R.id.DashLatitude); 
      DashLongitude = (TextView)dashboardInflatedView.findViewById(R.id.DashLongitude); 

      //Log.d(TAG, "Update Dashboard Location"); 
      DashLatitude.setText(latitude); 
      DashLongitude.setText(longitude); 
     } 
0

が、私は問題は座標が渡されて放送受信機、で、今、主な活動にあった、解決策を見つけ、コードは次のとおりです。

// Define the callback for what to do when data is received 
private BroadcastReceiver locationReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.d(TAG, "Broadcastreceiver Coordinates"); 

     int resultCode = intent.getIntExtra("resultCode", RESULT_CANCELED); 
     if (resultCode == RESULT_OK) { 
      Double latitude= intent.getDoubleExtra("latitude",0); 
      Double longitude= intent.getDoubleExtra("longitude",0); 

      DashboardFragment dashboardFrag = (DashboardFragment) 
        manager.findFragmentByTag("Dashboard"); 
      dashboardFrag .updateLocation(latitude.toString(),longitude.toString()); 
      Log.d(TAG, latitude.toString()+" --- "+longitude.toString()); 
     } 
    } 
}; 

私は、タグやアクセスによってフラグメントを取得しますメソッド

関連する問題