【问题标题】:Android Fragment Update TextView From AsyncTask onPostExecuteAndroid Fragment 从 AsyncTask onPostExecute 更新 TextView
【发布时间】:2014-07-16 17:08:56
【问题描述】:

我有一个使用 HttpGet 从远程服务器获取内容的 AsyncTask。我已经测试过,这工作正常,现在我想用这个 AsyncTask 的结果更新一个 TextView。这是我所做的。

从 Fragment 的 OnCreateView 中,我获得了对 Button 和 TextView 的引用,我最初隐藏了 TextView,然后在 OnClickListener 中为我想要取消隐藏 textview 并使用 AsyncTask 的结果更新该 textview 的按钮

 View rootView = inflater.inflate(R.layout.fragment_programs_list, container, false);
        Button btnLoadPrograms = (Button) rootView.findViewById(R.id.btnLoadPrograms);
        TextView tvShowPrograms = (TextView) rootView.findViewById(R.id.tvRestCall);
        tvShowPrograms.setVisibility(View.GONE);

        btnLoadPrograms.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                startNewAsyncTask();    

            }
        });

        return rootView;

现在在AsyncTask的onPostExecute中,我要更新Textview

@Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            getView().findViewById(R.id.tvRestCall).setVisibility(View.SHOW); //Does not exit
        }

如何从 Fragment 的 AsyncTask 中获取对 TextView 的引用,然后使用 doinbackground 的结果更新该 TextView。

【问题讨论】:

  • 您可以将文本视图引用传递给 startNewAsyncTask(),然后将其传递给构造函数中的实际 AsyncTask 并在 onPostExecute 中使用它

标签: android android-fragments android-asynctask


【解决方案1】:

尝试使用getView().findViewById(R.id.tvRestCall).setVisibility(View.VISIBLE);

【讨论】:

    【解决方案2】:

    试试这个方法,

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            tvShowPrograms.setVisibility(View.VISIBLE); 
        }
    

    【讨论】:

    • 谢谢,这是一个不错的选择,我最终为 TextView 设置了一个公共属性,因此可以从 OnPostExecute 访问它。
    【解决方案3】:

    我同意https://stackoverflow.com/users/1113949/ksarmalkar - 您可以发送对 AsyncTask 的引用,然后使用此引用设置 mYourView.setVisibility(View.VISIBLE); 的可见性

    【讨论】:

      【解决方案4】:

      我最终解决了以下问题 为 textView 设置公共属性

      public TextView tvShowPrograms;
      

      然后在 OnCreateView 中初始化 TextView 并将文本设置为 null

      tvShowPrograms = (TextView) rootView.findViewById(R.id.tvRestCall);
              tvShowPrograms.setText("");
      

      然后是onPostExecute,我只是将textView设置为结果。

      @Override
              protected void onPostExecute(String result) {
                  super.onPostExecute(result);
                  tvShowPrograms.setText(result);
              }
      

      感谢您的回答,我很高兴它正在工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多