0

所以我有這個片段,其中包含多個TextView,當用戶點擊「下一個」按鈕或「上一個」按鈕時,它會被更改。我在哪裏可以定義片段中的textViews以多次更改其內容?

的onCreateView方法中我有:

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

    View inflatedView = inflater.inflate(R.layout.fragment_time_table, container, false); 


    update(inflatedView,worker.current.getTarih(),worker.current.getHicri(),worker.current.getGün(),worker.current.getImsak(),worker.current.getSabah(),worker.current.getGüneş(),worker.current.getÖğle(),worker.current.getIkindi(),worker.current.getAkşam(),worker.current.getYatsı()); 


    // Inflate the layout for this fragment 
    return inflatedView; 


} 
上的更新方法

public void update(View dimension,String tarih, String hicri, String gun, String imsak, String sabah, String gunes, String ogle, String ikindi, String aksam, String yatsi){ 

    TextView gunView = (TextView) dimension.findViewById(R.id.gun); 
    TextView imsakView = (TextView) dimension.findViewById(R.id.imsak); 
    TextView sabahView = (TextView) dimension.findViewById(R.id.sabah); 
    TextView gunesView = (TextView) dimension.findViewById(R.id.gunes); 
    TextView ogleView = (TextView) dimension.findViewById(R.id.ogle); 
    TextView ikindiView = (TextView) dimension.findViewById(R.id.ikindi); 
    TextView aksamView = (TextView) dimension.findViewById(R.id.aksam); 
    TextView yatsiView = (TextView) dimension.findViewById(R.id.yatsi); 


    gunView.setText(gun); 
    imsakView.setText(imsak); 
    sabahView.setText(sabah); 
    gunesView.setText(gunes); 
    ogleView.setText(ogle); 
    ikindiView.setText(ikindi); 
    aksamView.setText(aksam); 
    yatsiView.setText(yatsi); 
} 

更新方法被調用用戶的點擊。對我來說,每次調用update()時都會重新定義textview。 我嘗試在onCreate方法上定義TextView,但我一直在獲取NPE。

+0

我打賭的'worker'是空某一部分......很難說沒有了logcat的雖然 –

+0

在'onCreateView'或'onActivityCreated'(你需要在'onCreateView'返回'View'實例變量因爲您需要在'onCreateView'之外訪問它) –

+0

您應該只將'worker.current'作爲一個參數傳遞給'update'方法。沒有必要爲這一個對象拆分所有字段 –

回答

0

你必須改變這樣的方式,

通過這樣做,你的TextView不會被重新定義每次

變化:

public class ViewFragment extends Fragment { 

    public TextView gunView, imsakView, sabahView, gunesView, ogleView, ikindiView, aksamView, yatsiView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     View inflatedView = inflater.inflate(R.layout.content_main, container, false); 
     gunView = (TextView) inflatedView.findViewById(R.id.gun); 
     imsakView = (TextView) inflatedView.findViewById(R.id.imsak); 
     sabahView = (TextView) inflatedView.findViewById(R.id.sabah); 
     gunesView = (TextView) inflatedView.findViewById(R.id.gunes); 
     ogleView = (TextView) inflatedView.findViewById(R.id.ogle); 
     ikindiView = (TextView) inflatedView.findViewById(R.id.ikindi); 
     aksamView = (TextView) inflatedView.findViewById(R.id.aksam); 
     yatsiView = (TextView) inflatedView.findViewById(R.id.yatsi); 
     update("1", "2", "3", "4", "5", "5", "6", "7", "8", "9"); //remove view from here 
     // Inflate the layout for this fragment 
     return inflatedView; 
    } 

    public void update(String tarih, String hicri, String gun, String imsak, String sabah, String gunes, String ogle, String ikindi, String aksam, String yatsi) { 
     gunView.setText(gun); 
     imsakView.setText(imsak); 
     sabahView.setText(sabah); 
     gunesView.setText(gunes); 
     ogleView.setText(ogle); 
     ikindiView.setText(ikindi); 
     aksamView.setText(aksam); 
     yatsiView.setText(yatsi); 
    } 
} 
+0

這是如何防止NullPointerException?你所做的只是從update方法中移動一些行到OnCreateView –

+0

我曾嘗試過,但之後我得到更新方法的錯誤。我得到「無法解析符號...」 –

+0

請檢查我更新的答案。我沒有收到任何錯誤@BillyBatson –

-1

這裏是我的想法,希望它作品,我沒有嘗試過自己。如果你想定義TextView而不是重複定義它,爲什麼不用Gradle選項(compile'c​​om.jakewharton:butterknife:7.0.1')編譯後使用ButterKnife在你的片段類內部完成。

public class MyFragment extends Fragment { 

     @Bind(R.id.textView)TextView tv; 
     @Bind(R.id.textView)TextView tv2, tv3 etc; 
    ... 
    ... 
     @Override 
     OnActivityCreated(Bundle savedInstance){ 
      ButterKnife.Bind(getActivity()); 
    } 
     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 

      tv.setText(String.format(Locale.US, "ABCD %d", i)); 
    } 
+0

請儘量尊重原代碼的意圖。您可以在評論中建議圖書館 –

相關問題