gpt4 book ai didi

java - 从 PlaceHolderFragment : "' com. 执行 AsyncTask example.Activity.this' 无法从静态上下文引用”

转载 作者:行者123 更新时间:2023-12-01 09:21:07 24 4
gpt4 key购买 nike

我创建了一个名为 UserProfile.java 的选项卡式 Activity 。正如许多人所知,这种 Activity 带有一个名为 PlaceholderFragment 的内置类,这基本上就是神奇发生的地方。我的看起来如下:

public static class PlaceholderFragment extends Fragment {

private static final String ARG_SECTION_NUMBER = "section_number";


public PlaceholderFragment() {
}

public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

// Some code related to database queries irrelevant to this question...

if (getArguments().getInt(ARG_SECTION_NUMBER) == 1) {
View profileView = inflater.inflate(
R.layout.fragment_user_profile_data,
container,
false
);

// Here's some code intended to get edittext's values irrelevant to this question...

final Button saveProfile = (Button) profileView.findViewById(R.id.profile_save_data);

saveProfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

UpdateProfileForm upf = new UpdateProfileForm(
userName.getText().toString(),
userLastName.getText().toString(),
userID.getText().toString(),
userPhone.getText().toString(),
userEmail.getText().toString(),
userAddress.getText().toString()
);

new UpdateProfile().execute(upf);
view.setVisibility(View.GONE);
}
});
return profileView;


} else if (getArguments().getInt(ARG_SECTION_NUMBER) == 2) {
View profileView = inflater.inflate(R.layout.another_fragment, container, false);
return profileView;
} else {
View profileView = inflater.inflate(R.layout.fragment_user_profile_data, container, false);
return profileView;
}
}
}

如您所见,我有一个名为 fragment_user_profile_data 的表单 fragment ,我在其中获取用户的数据,一个 UpdateProfileForm 类来存储它并将其传递给名为 的 AsyncTask >UpdateProfile用于在点击saveProfile按钮时更新服务器端的用户信息。

但是,如果尝试该行

new UpdateProfile().execute(upf);

一个

'com.example.UserProfile.this' cannot be referenced from a static context

Android Studio 将显示错误。有人告诉我要么从 PlaceholderFragment 类中去掉“静态”属性,要么将我的 AsyncTask 设为静态,但它们都不起作用。

我陷入困境,所以任何帮助将不胜感激!

最佳答案

所以,基本上我所做的事情是错误的,因为我使用单个 fragment (PlaceholderFragment)来承担三个独立的职责,正如 @cricket_007 在 his comment to my question 中提到的那样。 .

我这样做是因为唯一的 TabbedActivity tutorial我发现使用它。

基本上,在使用 TabbedActivity 时,您不需要 PlaceholderFragment,因此您可以轻松摆脱它。现在,在 Activity 中生成的 SectionsPagerAdapter 类的 getItem 方法中,替换以下行

返回 PlaceholderFragment.newInstance(position + 1);

使用 switch 语句作为位置参数并返回相应 fragment 的实例。即:

public Fragment getItem(int position) {
switch (position) {
case 0:
UserProfileData tab1 = new UserProfileData();
return tab1;
case 1:
UserProfileCollections tab2 = new UserProfileCollections();
return tab2;
case 2:
UserProfileBalance tab3 = new UserProfileBalance();
return tab3;
default:
return null;
}
}

最后,在 Fragment 类中声明 AsyncTask 和表单类,并在 Fragment 的 onCreateView 方法中设置 EditTexts 的值和按钮的功能,然后对其进行 inflate 并返回。

由于缺乏有关此 Activity 的示例,我希望这个答案有所帮助。不管怎样,谢谢您的回答!

关于java - 从 PlaceHolderFragment : "' com. 执行 AsyncTask example.Activity.this' 无法从静态上下文引用”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40163545/

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