gpt4 book ai didi

java - SectionsStatePagerAdapter 已弃用错误

转载 作者:行者123 更新时间:2023-12-01 18:35:46 27 4
gpt4 key购买 nike

我开发了一个部分状态寻呼机适配器,旨在帮助处理移动应用程序的帐户设置中的 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;

导入正确的 Activity

关于java - SectionsStatePagerAdapter 已弃用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60049520/

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