2016-08-05 70 views
3

我想設置textView在片段從另一個活動此活動不MainActivity相關的具有片段transaction ..的setText從其他活性片段不與片段

已經嘗試從與有關的其他相關文章的一些方法,我的問題,但得到一個錯誤..

這裏是我的內部片段的方法recieve從另一個活動

片段A

public class FragmentA extends Fragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     ProgressDialog pDialog = new ProgressDialog(getContext()); 
     pDialog.setCancelable(false); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflating view layout 
     View layout = inflater.inflate(R.layout.fragment_A, container, false); 

     //Put Data to id fragment 
     valueName = (TextView) layout.findViewById(R.id.valueNameNav); 
     valueStatus = (TextView) layout.findViewById(R.id.valueStatusNav); 

    } 

    public void setText(String name, String status){ 

      valueName = (TextView) getView().findViewById(R.id.valueNameNav); 
      valueName.setText(name); 
      valueStatus = (TextView) getView().findViewById(R.id.valueStatusNav); 
      valueStatus.setText(status); 
    } 
} 

,這是我如何調用setText方法片段從活動

String editValueName= editName.getText().toString(); 
String lastStatus = valueStatus.getText().toString(); 

FragmentA mFragment = (FragmentA) 
    getSupportFragmentManager().findFragmentById(R.id.fragment_A); 

mFragment.setText(editValueName, lastStatus); 

卻得到了這樣的

顯示java.lang.NullPointerException錯誤:試圖調用虛擬方法無效 COM .example.study.fragment.fragmentA.setText(java.lang.String, java.lang.String)'on null object reference

100%肯定有字符串上的數據字符串getText

+1

您無法爲其他活動的視圖設置文本,您必須在該活動中設置文本,您可以使用意圖將字符串從一個活動傳遞到另一個活動 – has19

+0

您無法訪問不屬於該活動的一部分。但是如果你真的想要執行這樣的任務。使用應該'BroadcastReceiver'。 如果你的片段被附加到活動中,你應該接口到這項工作。 –

+0

此處片段爲空(或)片段未處於添加狀態。確保你的片段已被添加。 –

回答

2

與ID container具有高度寬度您的活動創建的FrameLayout到MATCH_PARENT 然後在你的活動添加片段這樣

FragmentA newFragment = new FragmentA(); 
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.container, newFragment).commit(); 

,比設置文本

String editValueName= editName.getText().toString(); 
String lastStatus = valueStatus.getText().toString(); 
newFragment .setText(editValueName, lastStatus); 
+0

這個片段被附加在'MainActivity'上,並且我想傳遞給fragment_A的數據來自'UpdateActivity' –

+0

比將此代碼添加到你的UpdateActivity –

+0

'錯誤的第二個參數類型:Found'com。 example.study.fragment.fragmentA,在片段事務中將'android.app.fragment'替換爲(int,com.example.study.fragment.fragmentA)'show this error on'ft .replace(R.id.container,newFragment).commit();''newFragment'是問題 –

1

試着這樣做,並確保您的片段附加了活動。

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_grupos); 

    if(savedInstanceState == null) 
    { 
     fragment = new FragmentA(); 
     fragment.setTag(R.id.myfragmentId); 
     getFragmentManager().beginTransaction() 
      .add(R.id.container, fragment).commit(); 
    } 
    else 
    { 
     if(fragment == null) 
     { 
      fragment = (FragmentA) getFragmentManager().findFragmentByTag(R.id.myfragmentId); 
     } 
    } 
} 
+0

是的,它被附上。讓我知道,哪些活動放在這些代碼中?我的片段附加在'MainActivity'中,而我的字符串來自'UpdateActivity' ..這是可能的嗎? –

2

您可以使用存儲SharedPreferences來保存您的字符串並將其加載到每一處。當然,如果您想更改您的代碼。

+0

SharedPreferences在這裏不是正確的選擇 – Bulu

+0

已經嘗試過了,但是這裏仍然沒有更新..數據是從服務器上,在服務器上更新,在fragment_B/C/D上更新..只有fragment_A沒有更新。但'sharedPreferences'不是很推薦 –

2

無需findView在setText方法你應該這樣做,它會工作

public class FragmentA extends Fragment { 

TextView valueName,valueStatus ; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    ProgressDialog pDialog = new ProgressDialog(getContext()); 
    pDialog.setCancelable(false); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflating view layout 
    View layout = inflater.inflate(R.layout.fragment_A, container, false); 

    //Put Data to id fragment 
    valueName = (TextView) layout.findViewById(R.id.valueNameNav); 
    valueStatus = (TextView) layout.findViewById(R.id.valueStatusNav); 

return layout; 
} 

public void setText(String name, String status){ 

     valueName.setText(name); 
     valueStatus.setText(status); 
} 

}

+0

仍爲空對象,我應該檢查字符串的值嗎?我很確定在另一個片段上更新了原因。只有fragment_A不會從'UpdateActivity'接收更新 –