Android-基于异步服务器响应在片段视图中设置数据

Android-基于异步服务器响应在片段视图中设置数据,android,android-activity,android-fragments,android-asynctask,android-lifecycle,Android,Android Activity,Android Fragments,Android Asynctask,Android Lifecycle,我有如下片段,其中onPostNetworkRequestWithCode()方法由代码的另一部分调用(应用程序扩展了执行网络请求的应用程序类),以绘制视图 由于片段创建链(onCreate()、onCreateView()等)是在与重新绘制视图的onPostNetworkRequestWithCode()不同的线程中调用的,因此当onPostNetworkRequestWithCode()方法找不到要绘制的视图时,有时会出现争用情况。我怎么能让它等到视图创建完成后再继续发布呢 public c

我有如下片段,其中onPostNetworkRequestWithCode()方法由代码的另一部分调用(应用程序扩展了执行网络请求的应用程序类),以绘制视图

由于片段创建链(onCreate()、onCreateView()等)是在与重新绘制视图的onPostNetworkRequestWithCode()不同的线程中调用的,因此当onPostNetworkRequestWithCode()方法找不到要绘制的视图时,有时会出现争用情况。我怎么能让它等到视图创建完成后再继续发布呢

public class MeStatsTableFragment extends Fragment implements HttpResponseHandlerWithResponseCode {

    private static final String LINKED_USER_ID = "linkedUserId";
    private Context mContext;

    public MeStatsTableFragment() {
        // Required empty public constructor
    }

    public static MeStatsTableFragment newInstance(long linkedUserId, Context context) {
        MeStatsTableFragment fragment = new MeStatsTableFragment();
        Bundle args = new Bundle();
        args.putLong(LINKED_USER_ID, linkedUserId);

        fragment.setArguments(args);
        fragment.mContext = context;
        return fragment;
    }


    /**
     * This is responsible for painting the chart after data is obtained by parent Me Fragment
     */
    @Override
    public void onPostNetworkRequestWithCode(HttpResponseCode responseCode) {

        long linkedUserId = getArguments().getLong(LINKED_USER_ID);
        MePageInfo m = App.getAppData().getMePageInfoById(linkedUserId);


        View v = getView();

        if (v == null) {
            Log.d("XXX", "Stats fragment Got stuck at view == null in Stats Fragment");
            // do nothing else, just return
        } else{


            v.findViewById(R.id.text_name).setText(m.name);
            // do other painting similarly with the view and the variable m



    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_me_stats_table, container, false);
        return v;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }


}

您可以使用greenrobot EventBus()-并在还没有片段的情况下制作一个粘性帖子


下面是关于sticky post和register的更多信息-

有没有不使用EventBus的方法来执行此操作?在您的情况下,您可以将此-MePageInfo m设置为字段,并检查onViewCreated(…)中是否为null,如果它不执行操作,但如果它仍然为null,则意味着getView()当MePageInfo m不为空时,不会为空。在哪里进行绘制?是否有其他视图显示其他数据?您可以使用布尔变量进行此操作。如果回调中的视图为null,则将布尔变量设置为true,并在onresume中检查该变量。如果该变量为true,则可以将文本设置为textview并重置该变量。