我在哪里可以定义片段中的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。
你必须改变这样的方式,
通过这样做,你的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);
}
}
这是如何防止NullPointerException?你所做的只是从update方法中移动一些行到OnCreateView –
我曾尝试过,但之后我得到更新方法的错误。我得到“无法解析符号...” –
请检查我更新的答案。我没有收到任何错误@BillyBatson –
这里是我的想法,希望它作品,我没有尝试过自己。如果你想定义TextView而不是重复定义它,为什么不用Gradle选项(compile'com.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));
}
请尽量尊重原代码的意图。您可以在评论中建议图书馆 –
我打赌的'worker'是空某一部分......很难说没有了logcat的虽然 –
在'onCreateView'或'onActivityCreated'(你需要在'onCreateView'返回'View'实例变量因为您需要在'onCreateView'之外访问它) –
您应该只将'worker.current'作为一个参数传递给'update'方法。没有必要为这一个对象拆分所有字段 –