gpt4 book ai didi

android - 从 json 获取一次数据并在 3 个 fragment 中使用它

转载 作者:搜寻专家 更新时间:2023-11-01 09:41:42 25 4
gpt4 key购买 nike

我正在使用 volley 从 JSON 获取数据,Activity 中有 3 个 Fragment,我必须用数据填充这些 fragment 我在 MainActivity 中从 JSON 收到。我想从 JSON 获取一次数据,并在 Activity 和所有这 3 个 Fragment 中使用它。我将接收到的数据放在 List 中,如下所示:

List<Display_Activity_Model> videoDetailList;

然后我使用如下接口(interface)将此列表从 Activity 发送到其他 fragment :

在 Activity 中我有这个方法:

@Override
public List<Display_Activity_Model> getDataList() {
return videoDetailList;
}

在我的一个 fragment 中:

public interface GetDataInterface {
List<Display_Activity_Model> getDataList();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
sGetDataInterface= (GetDataInterface) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + "must implement GetDataInterface Interface");
}
}

@Override
public void onResume() {
super.onResume();
if(sGetDataInterface != null){
dataListFromDispAct = sGetDataInterface.getDataList();
}
}

当我调试代码时,我看到 MainActivity 中的 getDataList 方法在使用 volley 获取 json 的方法之前被调用。所以我总是收到空列表。

我的问题是:使用 volley 一次获取数据并在其他 fragment 中使用它的最佳方法是什么?

更新 1:

@凯塔纯一郎:

我在 fragment 中定义了“更新”方法,例如:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.video_info,container,false);

initComponents(view);

if (dataListFromDispAct != null) {
txt_view_count.setText(dataListFromDispAct.get(0).getView_count());
}

return view;
}

public void update(List<Display_Activity_Model> videoDetailList){

dataListFromDispAct=videoDetailList;

}

在“getItemMenuGson”方法中加载 json 后,我在 activity 中调用“update”方法:

getItemMenuGson(new CallBack() {
@Override
public void onSuccess(List<Display_Activity_Model> itemMenuGsonList) {
videoDetailList=itemMenuGsonList;
new Video_Info().update(videoDetailList);

}

@Override
public void onFail(String msg) {

}
});

问题是 fragment 中的方法“onCreateView”在更新方法之前被调用。当我声明更新方法为静态时,它也是相同的,变量“dataListFromDispAct”始终为空。

更新2:

Debugging result

更新 3:@皮尤什

我实现了您的回应,但它无法解决这个问题。我得到的是空列表,因为 onCreateView 方法比 Activity 中的 getItemMenuGson 方法执行得早。我声明:

SharedApplication mapp = SharedApplication.getInstance();
ArrayList<String> myList = mapp.getArrayListData();

在 fragment 中的 onActivityCreated 中,但它也在 Activity 中的 getItemMenuGson 方法之前运行。方法调用的顺序:

method's running order

我该怎么办?如何在 Activity 中调用 getItemMenuGson 方法来获取 JSON,然后加载 fragment 布局以将那些加载的数据填充到 fragment 中?

解决方案:问题的关键在于首先运行的静态方法:

Fragment中定义以下代码:

public class Video_Info extends Fragment {

static TextView txt_view_count;
List<Display_Activity_Model> dataListFromDispAct;


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view=inflater.inflate(R.layout.video_info,container,false);
txt_view_count= (TextView) view.findViewById(R.id.txt_view_count);
return view;
}
public static void update(List<Display_Activity_Model> videoDetailList)
{
txt_view_count.setText(videoDetailList.get(0).getView_count());
}
}

Activity 从 JSON 获取数据到列表调用更新方法后:

 getItemMenuGson(new CallBack() {
@Override
public void onSuccess(List<Display_Activity_Model> itemMenuGsonList) {
videoDetailList = itemMenuGsonList;

//////////////////
Video_Info.update(videoDetailList);
///////////////////

Uri vidUri = Uri.parse(itemMenuGsonList.get(0).getMedia().getURL());
vidView.setVideoURI(vidUri);

}

最佳答案

为了在调用 API 后将数据从 Activity 发送到 Fragment,您可以在 Fragment 中创建一个方法 update() 来接收数据,并在 loadData finish() 时在 Activity 中调用 fragment.update()。

new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//Parse resonse to *videoDetailList*
fragment.update(videoDetailList);
}
}

关于android - 从 json 获取一次数据并在 3 个 fragment 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39630216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com