Android IndexOutOfBoundsException:检测到不一致

Android IndexOutOfBoundsException:检测到不一致,android,android-recyclerview,Android,Android Recyclerview,我正在使用recyclerView并将数据加载为arrayList。如果arrayList少于7项,则不会发生崩溃 否则,我有一个致命错误: java.lang.IndexOutOfBoundsException:检测到不一致。视图保持架适配器位置无效视图保持架{3b1755be位置=7 id=-1,oldPos=-1,pLpos:-1无父项} 有人能帮忙吗 DiagnosticAdapter.java public class DiagnosticAdapter extends Recycle

我正在使用recyclerView并将数据加载为arrayList。如果arrayList少于7项,则不会发生崩溃

否则,我有一个致命错误:

java.lang.IndexOutOfBoundsException:检测到不一致。视图保持架适配器位置无效视图保持架{3b1755be位置=7 id=-1,oldPos=-1,pLpos:-1无父项}

有人能帮忙吗

DiagnosticAdapter.java

public class DiagnosticAdapter extends RecyclerView.Adapter<DiagnosticAdapter.ViewHolder> implements Filterable {
    public static ArrayList<Diagnostic> diagnostics;
    private ArrayList<Diagnostic> mFilteredDiagnosticArray;


    public DiagnosticAdapter(ArrayList<Diagnostic> diagnostics) {
        this.diagnostics = diagnostics;

    }

    @Override
    public DiagnosticAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DiagnosticAdapter.ViewHolder viewHolder, int i) {

        viewHolder.parameter.setText(diagnostics.get(i).getParameter());
        viewHolder.value.setText(diagnostics.get(i).getValue());
    }

    @Override
    public Filter getFilter() {

        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {

                String charString = charSequence.toString();

                if (charString.isEmpty()) {

                    mFilteredDiagnosticArray = diagnostics;
                } else {
                    ArrayList<Diagnostic> filteredList = new ArrayList<>();

                    for (Diagnostic diagnostic : diagnostics) {

                        if (diagnostic.getParameter().toLowerCase().contains(charString) || diagnostic.getValue().toLowerCase().contains(charString)) {

                            filteredList.add(diagnostic);
                        }
                    }

                    mFilteredDiagnosticArray = filteredList;

                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = mFilteredDiagnosticArray;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                mFilteredDiagnosticArray = (ArrayList<Diagnostic>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }

    @Override
    public int getItemCount() {
        return diagnostics.size();
    }

}
public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView parameter, value;
    public ViewHolder(View view) {
        super(view);
        parameter = (TextView)view.findViewById(R.id.parameter);
        value = (TextView)view.findViewById(R.id.value);
    }
}
public class Fragment1 extends Fragment   {
    private PtrClassicFrameLayout mPtrFrame;
    private RecyclerView recyclerView;
    private ArrayList<Diagnostic> data;
    public static DiagnosticAdapter adapter;
    private  OkHttpClient client;
    private  Handler handler;
    public static String constVar;
    private String method;
    public Fragment1() {

    }
    private Boolean mIsRefreshing = false;
    private String ipAddress;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_1, container, false);
    }

    @Override
    public void onViewCreated(final View view, @Nullable final Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_viewDiag);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new WrapContentLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
        Log.i("mIsRefreshing",mIsRefreshing.toString());
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            method = getArguments().getString("method");
            Log.i("METHOD",method);

            loadJSON();

        }else{
        }
    }

    private void loadJSON(){
       // Log.i("Fragment1",ipAddress);
        Retrofit retrofit = new Retrofit.Builder()
                //.baseUrl("http://"+ipAddress+":8000")
               .baseUrl("http://10.206.208.92"+":8000")
                .addConverterFactory(GsonConverterFactory.create())
                .build();


        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call ;
        switch (method){
            case "identification":
                call = request.getIdentification();
                break;
            case "memory":
                call = request.getMemory();
                break;
            case "sysInfo":
                call = request.getSysInfo();
                break;
            case "conditionalAccess":
                call = request.getConditionalAccess();
                break;
            case "network":
                call = request.getNetwork();
                break;
            case "software":
                call = request.getSoftware();
                break;
            case "loader":
                call = request.getLoader();
                break;
            default:
                call = request.getJSON();
                break;
        }

        call.enqueue(new Callback<JSONResponse>() {
            @Override
            public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                JSONResponse jsonResponse = response.body();
                switch (method){
                    case "identification":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getIdentification()));
                        break;
                    case "memory":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getMemory()));
                        break;
                    case "sysInfo":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getSysInfo()));
                        break;
                    case "conditionalAccess":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getConditionalAccess()));
                        break;
                    case "network":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getNetwork()));
                        break;
                    case "software":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getSoftware()));
                        break;
                    case "loader":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getLoader()));
                        break;
                    default:
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getDiagnostics()));
                        break;

                }
                //data = new ArrayList<>(Arrays.asList(jsonResponse.getDiagnostics()));
                //Toast.makeText(getContext(), data.size(), Toast.LENGTH_LONG).show();
                adapter = new DiagnosticAdapter(data);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                mIsRefreshing = true;
                Log.i("mIsRefreshing",mIsRefreshing.toString());


                //  mPtrFrame.refreshComplete();

            }
            @Override
            public void onFailure(Call<JSONResponse> call, Throwable t) {
              //  mPtrFrame.refreshComplete();
                try {
                    adapter.diagnostics.clear();
                    adapter.notifyDataSetChanged();
                } catch (Exception e) {
                    Log.e("ERROR", "showProgressDialog", e);
            }
                Snackbar.make(getView(), "Unable to fetch json: " + t.getMessage(), Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }
}
public class DemoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpagerDemo);
        // final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        SmartTabLayout viewPagerTab = (SmartTabLayout)
        findViewById(R.id.viewpagertab);


        TabsAdapter adapter = new TabsAdapter(getSupportFragmentManager());
        adapter.addFrag(new Fragment1(), "memory");
        adapter.addFrag(new Fragment1(), "identification");
        adapter.addFrag(new Fragment1(), "loader");
        viewPager.setAdapter(adapter);
        viewPagerTab.setViewPager(viewPager);
    }
}
public class TabsAdapter extends FragmentPagerAdapter {
    private final List<android.support.v4.app.Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    public TabsAdapter(FragmentManager fm) {
      super(fm);
    }
    public void addFrag(android.support.v4.app.Fragment fragment, String title){
      Bundle bundle = new Bundle();
      bundle.putString("method", title);
      fragment.setArguments(bundle);

      mFragmentList.add(fragment);
      mFragmentTitleList.add(title);
    }
    @Override
    public android.support.v4.app.Fragment getItem(int position) {
      return mFragmentList.get(position);
    }
    @Override
    public int getCount() {
      return mFragmentList.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
      return mFragmentTitleList.get(position);
    }
}
Fragment1.java

public class DiagnosticAdapter extends RecyclerView.Adapter<DiagnosticAdapter.ViewHolder> implements Filterable {
    public static ArrayList<Diagnostic> diagnostics;
    private ArrayList<Diagnostic> mFilteredDiagnosticArray;


    public DiagnosticAdapter(ArrayList<Diagnostic> diagnostics) {
        this.diagnostics = diagnostics;

    }

    @Override
    public DiagnosticAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DiagnosticAdapter.ViewHolder viewHolder, int i) {

        viewHolder.parameter.setText(diagnostics.get(i).getParameter());
        viewHolder.value.setText(diagnostics.get(i).getValue());
    }

    @Override
    public Filter getFilter() {

        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {

                String charString = charSequence.toString();

                if (charString.isEmpty()) {

                    mFilteredDiagnosticArray = diagnostics;
                } else {
                    ArrayList<Diagnostic> filteredList = new ArrayList<>();

                    for (Diagnostic diagnostic : diagnostics) {

                        if (diagnostic.getParameter().toLowerCase().contains(charString) || diagnostic.getValue().toLowerCase().contains(charString)) {

                            filteredList.add(diagnostic);
                        }
                    }

                    mFilteredDiagnosticArray = filteredList;

                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = mFilteredDiagnosticArray;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                mFilteredDiagnosticArray = (ArrayList<Diagnostic>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }

    @Override
    public int getItemCount() {
        return diagnostics.size();
    }

}
public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView parameter, value;
    public ViewHolder(View view) {
        super(view);
        parameter = (TextView)view.findViewById(R.id.parameter);
        value = (TextView)view.findViewById(R.id.value);
    }
}
public class Fragment1 extends Fragment   {
    private PtrClassicFrameLayout mPtrFrame;
    private RecyclerView recyclerView;
    private ArrayList<Diagnostic> data;
    public static DiagnosticAdapter adapter;
    private  OkHttpClient client;
    private  Handler handler;
    public static String constVar;
    private String method;
    public Fragment1() {

    }
    private Boolean mIsRefreshing = false;
    private String ipAddress;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_1, container, false);
    }

    @Override
    public void onViewCreated(final View view, @Nullable final Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_viewDiag);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new WrapContentLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
        Log.i("mIsRefreshing",mIsRefreshing.toString());
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            method = getArguments().getString("method");
            Log.i("METHOD",method);

            loadJSON();

        }else{
        }
    }

    private void loadJSON(){
       // Log.i("Fragment1",ipAddress);
        Retrofit retrofit = new Retrofit.Builder()
                //.baseUrl("http://"+ipAddress+":8000")
               .baseUrl("http://10.206.208.92"+":8000")
                .addConverterFactory(GsonConverterFactory.create())
                .build();


        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call ;
        switch (method){
            case "identification":
                call = request.getIdentification();
                break;
            case "memory":
                call = request.getMemory();
                break;
            case "sysInfo":
                call = request.getSysInfo();
                break;
            case "conditionalAccess":
                call = request.getConditionalAccess();
                break;
            case "network":
                call = request.getNetwork();
                break;
            case "software":
                call = request.getSoftware();
                break;
            case "loader":
                call = request.getLoader();
                break;
            default:
                call = request.getJSON();
                break;
        }

        call.enqueue(new Callback<JSONResponse>() {
            @Override
            public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                JSONResponse jsonResponse = response.body();
                switch (method){
                    case "identification":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getIdentification()));
                        break;
                    case "memory":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getMemory()));
                        break;
                    case "sysInfo":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getSysInfo()));
                        break;
                    case "conditionalAccess":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getConditionalAccess()));
                        break;
                    case "network":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getNetwork()));
                        break;
                    case "software":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getSoftware()));
                        break;
                    case "loader":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getLoader()));
                        break;
                    default:
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getDiagnostics()));
                        break;

                }
                //data = new ArrayList<>(Arrays.asList(jsonResponse.getDiagnostics()));
                //Toast.makeText(getContext(), data.size(), Toast.LENGTH_LONG).show();
                adapter = new DiagnosticAdapter(data);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                mIsRefreshing = true;
                Log.i("mIsRefreshing",mIsRefreshing.toString());


                //  mPtrFrame.refreshComplete();

            }
            @Override
            public void onFailure(Call<JSONResponse> call, Throwable t) {
              //  mPtrFrame.refreshComplete();
                try {
                    adapter.diagnostics.clear();
                    adapter.notifyDataSetChanged();
                } catch (Exception e) {
                    Log.e("ERROR", "showProgressDialog", e);
            }
                Snackbar.make(getView(), "Unable to fetch json: " + t.getMessage(), Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }
}
public class DemoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpagerDemo);
        // final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        SmartTabLayout viewPagerTab = (SmartTabLayout)
        findViewById(R.id.viewpagertab);


        TabsAdapter adapter = new TabsAdapter(getSupportFragmentManager());
        adapter.addFrag(new Fragment1(), "memory");
        adapter.addFrag(new Fragment1(), "identification");
        adapter.addFrag(new Fragment1(), "loader");
        viewPager.setAdapter(adapter);
        viewPagerTab.setViewPager(viewPager);
    }
}
public class TabsAdapter extends FragmentPagerAdapter {
    private final List<android.support.v4.app.Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    public TabsAdapter(FragmentManager fm) {
      super(fm);
    }
    public void addFrag(android.support.v4.app.Fragment fragment, String title){
      Bundle bundle = new Bundle();
      bundle.putString("method", title);
      fragment.setArguments(bundle);

      mFragmentList.add(fragment);
      mFragmentTitleList.add(title);
    }
    @Override
    public android.support.v4.app.Fragment getItem(int position) {
      return mFragmentList.get(position);
    }
    @Override
    public int getCount() {
      return mFragmentList.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
      return mFragmentTitleList.get(position);
    }
}
TabsAdapter.java

public class DiagnosticAdapter extends RecyclerView.Adapter<DiagnosticAdapter.ViewHolder> implements Filterable {
    public static ArrayList<Diagnostic> diagnostics;
    private ArrayList<Diagnostic> mFilteredDiagnosticArray;


    public DiagnosticAdapter(ArrayList<Diagnostic> diagnostics) {
        this.diagnostics = diagnostics;

    }

    @Override
    public DiagnosticAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DiagnosticAdapter.ViewHolder viewHolder, int i) {

        viewHolder.parameter.setText(diagnostics.get(i).getParameter());
        viewHolder.value.setText(diagnostics.get(i).getValue());
    }

    @Override
    public Filter getFilter() {

        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {

                String charString = charSequence.toString();

                if (charString.isEmpty()) {

                    mFilteredDiagnosticArray = diagnostics;
                } else {
                    ArrayList<Diagnostic> filteredList = new ArrayList<>();

                    for (Diagnostic diagnostic : diagnostics) {

                        if (diagnostic.getParameter().toLowerCase().contains(charString) || diagnostic.getValue().toLowerCase().contains(charString)) {

                            filteredList.add(diagnostic);
                        }
                    }

                    mFilteredDiagnosticArray = filteredList;

                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = mFilteredDiagnosticArray;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                mFilteredDiagnosticArray = (ArrayList<Diagnostic>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }

    @Override
    public int getItemCount() {
        return diagnostics.size();
    }

}
public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView parameter, value;
    public ViewHolder(View view) {
        super(view);
        parameter = (TextView)view.findViewById(R.id.parameter);
        value = (TextView)view.findViewById(R.id.value);
    }
}
public class Fragment1 extends Fragment   {
    private PtrClassicFrameLayout mPtrFrame;
    private RecyclerView recyclerView;
    private ArrayList<Diagnostic> data;
    public static DiagnosticAdapter adapter;
    private  OkHttpClient client;
    private  Handler handler;
    public static String constVar;
    private String method;
    public Fragment1() {

    }
    private Boolean mIsRefreshing = false;
    private String ipAddress;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_1, container, false);
    }

    @Override
    public void onViewCreated(final View view, @Nullable final Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_viewDiag);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new WrapContentLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
        Log.i("mIsRefreshing",mIsRefreshing.toString());
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            method = getArguments().getString("method");
            Log.i("METHOD",method);

            loadJSON();

        }else{
        }
    }

    private void loadJSON(){
       // Log.i("Fragment1",ipAddress);
        Retrofit retrofit = new Retrofit.Builder()
                //.baseUrl("http://"+ipAddress+":8000")
               .baseUrl("http://10.206.208.92"+":8000")
                .addConverterFactory(GsonConverterFactory.create())
                .build();


        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call ;
        switch (method){
            case "identification":
                call = request.getIdentification();
                break;
            case "memory":
                call = request.getMemory();
                break;
            case "sysInfo":
                call = request.getSysInfo();
                break;
            case "conditionalAccess":
                call = request.getConditionalAccess();
                break;
            case "network":
                call = request.getNetwork();
                break;
            case "software":
                call = request.getSoftware();
                break;
            case "loader":
                call = request.getLoader();
                break;
            default:
                call = request.getJSON();
                break;
        }

        call.enqueue(new Callback<JSONResponse>() {
            @Override
            public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                JSONResponse jsonResponse = response.body();
                switch (method){
                    case "identification":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getIdentification()));
                        break;
                    case "memory":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getMemory()));
                        break;
                    case "sysInfo":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getSysInfo()));
                        break;
                    case "conditionalAccess":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getConditionalAccess()));
                        break;
                    case "network":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getNetwork()));
                        break;
                    case "software":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getSoftware()));
                        break;
                    case "loader":
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getLoader()));
                        break;
                    default:
                        data = new ArrayList<>(Arrays.asList(jsonResponse.getDiagnostics()));
                        break;

                }
                //data = new ArrayList<>(Arrays.asList(jsonResponse.getDiagnostics()));
                //Toast.makeText(getContext(), data.size(), Toast.LENGTH_LONG).show();
                adapter = new DiagnosticAdapter(data);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                mIsRefreshing = true;
                Log.i("mIsRefreshing",mIsRefreshing.toString());


                //  mPtrFrame.refreshComplete();

            }
            @Override
            public void onFailure(Call<JSONResponse> call, Throwable t) {
              //  mPtrFrame.refreshComplete();
                try {
                    adapter.diagnostics.clear();
                    adapter.notifyDataSetChanged();
                } catch (Exception e) {
                    Log.e("ERROR", "showProgressDialog", e);
            }
                Snackbar.make(getView(), "Unable to fetch json: " + t.getMessage(), Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }
}
public class DemoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpagerDemo);
        // final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        SmartTabLayout viewPagerTab = (SmartTabLayout)
        findViewById(R.id.viewpagertab);


        TabsAdapter adapter = new TabsAdapter(getSupportFragmentManager());
        adapter.addFrag(new Fragment1(), "memory");
        adapter.addFrag(new Fragment1(), "identification");
        adapter.addFrag(new Fragment1(), "loader");
        viewPager.setAdapter(adapter);
        viewPagerTab.setViewPager(viewPager);
    }
}
public class TabsAdapter extends FragmentPagerAdapter {
    private final List<android.support.v4.app.Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    public TabsAdapter(FragmentManager fm) {
      super(fm);
    }
    public void addFrag(android.support.v4.app.Fragment fragment, String title){
      Bundle bundle = new Bundle();
      bundle.putString("method", title);
      fragment.setArguments(bundle);

      mFragmentList.add(fragment);
      mFragmentTitleList.add(title);
    }
    @Override
    public android.support.v4.app.Fragment getItem(int position) {
      return mFragmentList.get(position);
    }
    @Override
    public int getCount() {
      return mFragmentList.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
      return mFragmentTitleList.get(position);
    }
}
公共类TabsAdapter扩展了FragmentPagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共选项卡适配器(碎片管理器fm){
超级(fm);
}
public void addFrag(android.support.v4.app.Fragment片段,字符串标题){
Bundle=新Bundle();
bundle.putString(“方法”,标题);
fragment.setArguments(bundle);
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
public android.support.v4.app.Fragment getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
}

能否尝试在适配器中使用数据副本

private ArrayList<Diagnostic> diagnostics = new ArrayList<>();
public DiagnosticAdapter(ArrayList<Diagnostic> diagnostics) {
  this.diagnostics.addAll(diagnostics);
}
如下所示设置新数据:

public void clearData() {
  this.diagnostics.clear();
  notifyDataSetChanged();
}
public void setData(List<Diagnostics> data) {
  clearData();
  this.diagnostics.addAll(data);
  notifyDataSetChanged();
}
public void setData(列表数据){
clearData();
this.diagnostics.addAll(数据);
notifyDataSetChanged();
}
您可以使用另一个notify命令来代替使用NOTIFYDATASETCHANGE()。。。如果要使用动画或具有更好的性能,请使用函数


希望这能奏效…

请发布适配器类的实现。同时请检查初始化数据数组列表的方式。在初始化arralylist时,检查是否有任何缺少的索引。我猜测,当您没有崩溃时,活动中还有7项可见,它们完全填满了您的屏幕?@Totumus Maximus Yes是否在其他地方修改适配器的内容?不要忘记调用适配器.notifyDataSetChanged()。@beeb否,仅在fragmentjava.lang.NullPointerException中:尝试调用虚拟方法'boolean java.util.ArrayList.addAll(java.util.Collection)'在空对象引用上,我修复了此错误,但我不知道如何使用setDataI修复了它,但我仍然不知道如何使用SetDatas如果您有一个新的数据列表,您可以使用函数
setData()
,而不是创建新的适配器。例如,您在createView或其他任何地方使用空列表初始化适配器。当您从rest服务(或任何地方)获得新数据时,只需调用
adapter.setData(newlist)
,而不必调用
newadapter(newlist)
recyclerview.setAdapter(adapter)
。谢谢,好的,我现在明白了