我创建了一个名为UserProfile.java
的选项卡式活动。众所周知,这种活动带有一个名为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
的表单片段,用于获取用户数据,一个UpdateProfileForm
类用于存储数据并将其传递给名为UpdateProfile
的AsyncTask,用于在单击服务器端时更新服务器端的用户信息。 saveProfile
按钮。但是,如果尝试那条线
new UpdateProfile().execute(upf);
一个
不能从静态上下文引用“ com.example.UserProfile.this”
错误将由Android Studio显示。有人告诉我要么从PlaceholderFragment类中删除“静态”属性,要么使我的AsyncTask静态,但它们都不起作用。
我受困于此,因此不胜感激!
最佳答案
因此,基本上我所做的是错误的,因为我将一个片段(PlaceholderFragment
)用于三个独立的职责,如his comment to my question中提到的@ cricket_007。
我这样做是因为我发现的唯一TabbedActivity tutorial使用它。
基本上,使用TabbedActivity时,不需要PlaceholderFragment,因此可以轻松摆脱它。现在,在活动内生成的getItem
类的SectionsPagerAdapter
方法中,替换以下行return PlaceholderFragment.newInstance(position + 1);
带有用于position参数的switch语句,并返回适当片段的实例。即:
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;
}
}
最后,将AsyncTask和form类声明为Fragment类,并在Fragment的
onCreateView
方法中设置EditTexts的值和按钮的功能,然后对其进行充气并返回。鉴于缺少有关此活动的样本,我希望这个答案会有所帮助。无论如何,谢谢您的回答!
关于java - 从PlaceHolderFragment执行AsyncTask:“无法从静态上下文中引用'com.example.Activity.this'”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40163545/