我已经查看了堆栈上的几乎所有帖子,但没有发现任何类似我的问题。我在fragment
中有一个viewpager
,在该片段中有一个类,我们称之为customClass
。我从fragment
开始一个活动,它将一个值返回到片段的onActivityResult。在其中我调用了一个customClass方法,该方法使用从textView
包中检索到的数据更新onActivityResault
。
片段
public class clock_fragment extends Fragment {
customClass myClass;
public clock_fragment() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_clock, container, false);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.menu_settings) {
Intent intent = new Intent(getActivity(), SettingsActivity.class);
startActivityForResult(intent, 0);
}
return super.onOptionsItemSelected(item);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
myClass = new customClass();
myClass.initializeValues(this, view);
}
@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (resultCode != RESULT_CANCELED) {
myClass.updateTextView(data.getStringExtra("currency", "fail"));
}
}
}
customClass
public class myClass {
final String TAG = "TAG";
Fragment fragment;
TextView textView;
public myClass() {
}
public void initializeValues(clock_fragment f, View view) {
fragment = f;
textView = (TextView) view.findViewById(R.id.textView);
}
public void updateTextView(String value) {
textView.setText(value);
//i can change its colour
textView.setTextColor(fragment.getActivity().getResources().getColor(R.color.yellow));
//i can print out its updated value, not the one being shown on the screen
Log.e(TAG, "updateCurrencyFromPreferences: "+textView.getText());
}
}
所有方法都称为罚款,一切都在执行。我甚至可以在日志中打印出string
值,并在所有方法中为我提供所需的结果。文本视图文本已更改,由使用textView.getText()
证明并将其打印在updateTextView(String value)
末尾的日志消息中。
但textView
未更新其文字!我尝试了很多东西。我认为它可能与不具有相同textView
引用的片段有关,因为它在我启动activity
之后重新创建然后返回。
我甚至可以更改textColour
(textView
方法中的updateTextView
并且也能正常工作,我可以看到它发生了,但文字没有改变。我也尝试将文本更改为一些随机的虚拟文本,但没有运气。正如我所说,使用textView.getText()
打印日志信息显示日志中的更新文本,但它与屏幕上的内容不匹配(文本不会更改)。我甚至尝试将textView
从主片段传递到特定方法但是没有运气。请帮忙:'D
PS:自定义类已经引用了从传递给contructer的视图创建的textView
。一切正常,没有错误或分配问题,只有文字不更新。
如果这还不够,我很乐意提供更多信息。
答案 0 :(得分:2)
您提供的代码只是一个示例,请确保在主线程中调用项目中的setText()
。
如果还有一些问题,你可以尝试通过发布延迟运行来更新文本。