2017-10-21 158 views
0

這是我的第一個stackoverflow帖子。
我試圖建立一個應用程序,它用LocalBroadcastManager檢索傳感器數據,然後在中更新TextView已經連接容器內的片段。
我試圖從MainActivity調用homeFragment.passData()方法,但沒有成功。
我的猜測是因爲片段已經膨脹了,所以不能通過調用該方法來更新。

這裏是MainActivity代碼,我調用方法來更新TextView的從MainActivity更新textview內部片段

@Override 
    public void onReceive(Context context, Intent intent) { 
     String azimuthValue = intent.getStringExtra("azimuth"); 
     String pitchValue = intent.getStringExtra("pitch"); 
     String rollValue = intent.getStringExtra("roll"); 


     homeFragment.passData(azimuthValue, pitchValue, rollValue); 
    } 


,這裏是爲HomeFragment

public class HomeFragment extends Fragment { 

private static final String TAG = "HomeFragment"; 

private Context mContext; 

private TextView xValueTextView; 
private TextView yValueTextView; 
private TextView zValueTextView; 

private OnFragmentInteractionListener mListener; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_home, container, false); 

    xValueTextView = (TextView) rootView.findViewById(R.id.xValueTextView); 
    yValueTextView = (TextView) rootView.findViewById(R.id.yValueTextView); 
    zValueTextView = (TextView) rootView.findViewById(R.id.zValueTextView); 

    Log.d(TAG, "onCreateView: layout inflated"); 

    return rootView; 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    mContext = context; 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 

public interface OnFragmentInteractionListener {} 

public void passData(String x, String y, String z) { 
    xValueTextView.setText(x); 
    yValueTextView.setText(y); 
    zValueTextView.setText(z); 

    Log.i(TAG, "updateTextView: TextView value: " + xValueTextView.getText().toString() + "||" + yValueTextView.getText().toString() + "||" + zValueTextView.getText().toString()); 
} 

代碼}


雖然logcat的textview.getText( ).toString顯示更新值,實際視圖尚未更新

10-21 14:03:56.240 19338-19338/pro.adhi.willyam.orientation I/HomeFragment: updateTextView: TextView value: 45||-34||4 

這裏是截圖來自我的電話:https://i.stack.imgur.com/ZDsad.png

因此,如何正確地更新內部片段的TextView像我想要達到什麼目的?
我希望我的問題是可以理解的。 Thankyou

+0

只使用一個回調,它會調用你的UI中的片段,或者您可以使用片段的靜態對象。但我提到你使用回調 –

+0

即時通訊不能確定你的意思,你可以更具體請撥打 – fullmoon6661

回答

0

您需要在片段中設置setter/getter方法。

public class HomeFragment extends Fragment { 

TextView tv; 

    public void setTextView(String text) 
    { 
     TextView tv = (TextView) findViewById(*your id here*); 
     tv.setText(text); 
    } 
} 

在MainActivity你只需要使用此電話:

public class MainActivity extends AppCompatActivity { 

    ... 

    HomeFragment.setTextView("Hello World!"); 

    ... 

} 
+0

調用findviewbyid裏面的片段而不指定視圖將返回null。但我仍然會嘗試一下 – fullmoon6661