我在哪里可以定义片段中的textViews以多次更改其内容?

问题描述:

所以我有这个片段,其中包含多个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'方法。没有必要为这一个对象拆分所有字段 –

你必须改变这样的方式,

通过这样做,你的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 –

这里是我的想法,希望它作品,我没有尝试过自己。如果你想定义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

请尽量尊重原代码的意图。您可以在评论中建议图书馆 –