- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开发了一个部分状态寻呼机适配器,旨在帮助处理移动应用程序的帐户设置中的 fragment 。但我似乎无法弄清楚我哪里出了问题。
注意事项:由于 A 已弃用,这部分代码已从 A 更改为 B。
A.
public SectionsStatePagerAdapter(FragmentManager fm) {
super(fm);
}
B.
public SectionsStatePagerAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
上面的代码影响AccountSettingsActivity中的这个位:
pagerAdapter = new SectionsStatePagerAdapter(getSupportFragmentManager());
这是我的所有代码:
SectionsStatePagerAdapter.java
package com.archive.pod.Utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
/** This activity allows for the movement between account settings options */
public class SectionsStatePagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final HashMap<Fragment, Integer> mFragments = new HashMap<>();
private final HashMap<String, Integer> mFragmentNumbers = new HashMap<>();
private final HashMap<Integer, String> mFragmentNames = new HashMap<>();
public SectionsStatePagerAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String fragmentName){
mFragmentList.add(fragment);
mFragments.put(fragment, mFragmentList.size()-1);
mFragmentNumbers.put(fragmentName, mFragmentList.size()-1);
mFragmentNames.put(mFragmentList.size()-1, fragmentName);
}
/**
* returns the fragment with the name @param
* @param fragmentName
* @return
*/
public Integer getFragmentNumber(String fragmentName){
if(mFragmentNumbers.containsKey(fragmentName)){
return mFragmentNumbers.get(fragmentName);
}else{
return null;
}
}
/**
* returns the fragment with the name @param
* @param fragment
* @return
*/
public Integer getFragmentNumber(Fragment fragment){
if(mFragmentNumbers.containsKey(fragment)){
return mFragmentNumbers.get(fragment);
}else{
return null;
}
}
/**
* returns the fragment with the name @param
* @param fragmentNumber
* @return
*/
public String getFragmentName(Integer fragmentNumber){
if(mFragmentNames.containsKey(fragmentNumber)){
return mFragmentNames.get(fragmentNumber);
}else{
return null;
}
}
}
AccountSettingsActivity.java
package com.archive.pod.Profile;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.RelativeLayout;
import com.archive.pod.R;
import com.archive.pod.Utils.SectionsStatePagerAdapter;
import java.util.ArrayList;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
public class AccountSettingsActivity extends AppCompatActivity {
//Initializing
private Context mContext;
private SectionsStatePagerAdapter pagerAdapter;
private ViewPager mViewPager;
private RelativeLayout mRelativeLayout;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accountsettings);
mContext = AccountSettingsActivity.this;
mViewPager = findViewById(R.id.container);
mRelativeLayout = findViewById(R.id.relLayout1);
//Account Settings Options List Initializer
setupSettingsList();
//Account Settings Options Fragment Initializer
setupFragments();
//Back Arrow Initialization for Navigation Back to "Profile Activity"
ImageButton backArrow = findViewById(R.id.back_arrow);
backArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
private void setupFragments(){
pagerAdapter = new SectionsStatePagerAdapter(getSupportFragmentManager());
pagerAdapter.addFragment(new EditProfileFragment(), getString(R.string.editProfile)); //fragment 0
pagerAdapter.addFragment(new LogoutFragment(), getString(R.string.logout)); // fragment 1
}
//Allows for the overlay to show fragment on top of account settings activity
private void setViewPager(int fragmentNumber){
mRelativeLayout.setVisibility(View.GONE);
mViewPager.setAdapter(pagerAdapter);
mViewPager.setCurrentItem(fragmentNumber);
}
//All Options in Account Settings
private void setupSettingsList(){
ListView listView = findViewById(R.id.lvAccountSettings);
ArrayList<String> options = new ArrayList<>();
options.add(getString((R.string.editProfile))); //fragment 0
options.add(getString(R.string.notifications)); //fragment 1
options.add(getString(R.string.privacy_settings)); //fragment 2
options.add(getString(R.string.security)); //fragment 3
options.add(getString(R.string.ads)); //fragment 4
options.add(getString(R.string.help)); //fragment 5
options.add(getString(R.string.about)); //fragment 6
options.add(getString(R.string.logout)); //fragment 7
ArrayAdapter adapter = new ArrayAdapter(mContext, R.layout.listview_row_adjustment, options);
listView.setAdapter((adapter));
//Navigation to fragment page
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setViewPager(position);
}
});
}
}
**当单击菜单图标以显示选项时,屏幕不会显示选项,而是变白并返回到上一页,一旦再次单击,应用程序就会崩溃。
错误如下:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.archive.pod, PID: 19936
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.archive.pod/com.archive.pod.Profile.AccountSettingsActivity}: android.view.InflateException: Binary XML file line #8 in com.archive.pod:layout/activity_accountsettings: Binary XML file line #7 in com.archive.pod:layout/layout_center_viewpager: Error inflating class android.support.v4.view.ViewPager
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: android.view.InflateException: Binary XML file line #8 in com.archive.pod:layout/activity_accountsettings: Binary XML file line #7 in com.archive.pod:layout/layout_center_viewpager: Error inflating class android.support.v4.view.ViewPager
Caused by: android.view.InflateException: Binary XML file line #7 in com.archive.pod:layout/layout_center_viewpager: Error inflating class android.support.v4.view.ViewPager
Caused by: java.lang.ClassNotFoundException: android.support.v4.view.ViewPager
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at android.view.LayoutInflater.createView(LayoutInflater.java:815)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1231)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1119)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.archive.pod.Profile.AccountSettingsActivity.onCreate(AccountSettingsActivity.java:33)
at android.app.Activity.performCreate(Activity.java:7825)
at android.app.Activity.performCreate(Activity.java:7814)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.ViewPager" on path: DexPathList[[zip file "/data/app/com.archive.pod-mXwsGv9uKssJ6m5RH4nB6w==/base.apk"],nativeLibraryDirectories=[/data/app/com.archive.pod-mXwsGv9uKssJ6m5RH4nB6w==/lib/arm64, /system/lib64, /system/product/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
最佳答案
我在回答您的其他问题之一时来到这里,似乎这与同一个应用程序相关。
您收到的错误不是因为您在 SectionsStatePagerAdapter
中所做的更改,而是因为您在 activity_accountsettings 中包含的
布局。layout_center_viewpager
中添加了错误的 ViewPager .xml
确保使用 androidx.viewpager.widget.ViewPager
而不是已弃用的 android.support.v4.view.ViewPager
,并将 id 作为容器。
替换它,剩下的应该没问题,因为在您的 Activity 中,您正在使用此 import androidx.viewpager.widget.ViewPager;
关于java - SectionsStatePagerAdapter 已弃用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60049520/
我开发了一个部分状态寻呼机适配器,旨在帮助处理移动应用程序的帐户设置中的 fragment 。但我似乎无法弄清楚我哪里出了问题。 注意事项:由于 A 已弃用,这部分代码已从 A 更改为 B。 A. p
我是一名优秀的程序员,十分优秀!