TextView不更新TEXT

时间:2016-12-17 04:02:09

标签: android android-fragments textview

我已经查看了堆栈上的几乎所有帖子,但没有发现任何类似我的问题。我在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之后重新创建然后返回。

我甚至可以更改textColourtextView方法中的updateTextView并且也能正常工作,我可以看到它发生了,但文字没有改变。我也尝试将文本更改为一些随机的虚拟文本,但没有运气。正如我所说,使用textView.getText()打印日志信息显示日志中的更新文本,但它与屏幕上的内容不匹配(文本不会更改)。我甚至尝试将textView从主片段传递到特定方法但是没有运气。请帮忙:'D

PS:自定义类已经引用了从传递给contructer的视图创建的textView。一切正常,没有错误或分配问题,只有文字更新。

如果这还不够,我很乐意提供更多信息。

1 个答案:

答案 0 :(得分:2)

您提供的代码只是一个示例,请确保在主线程中调用项目中的setText()

如果还有一些问题,你可以尝试通过发布延迟运行来更新文本。