Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义适配器listview上的Android还原筛选器_Android_Listview_Filter - Fatal编程技术网

自定义适配器listview上的Android还原筛选器

自定义适配器listview上的Android还原筛选器,android,listview,filter,Android,Listview,Filter,从一个活动开始,我打开另一个活动并过滤自定义listview的结果 这是第一项活动: public class PersonaFragment extends Fragment { private PersonaAdapter personaAdapter; private ListView personeListView; private ArrayList<Persona> personeList = new ArrayList<Persona>

从一个活动开始,我打开另一个活动并过滤自定义listview的结果

这是第一项活动:

public class PersonaFragment extends Fragment {
    private PersonaAdapter personaAdapter;
    private ListView personeListView;
    private ArrayList<Persona> personeList = new ArrayList<Persona>();
    private ArrayList<String> listIdClas = new ArrayList<String>();
    private final static int INSERT_REQUEST = 1;
    private final static int FILTER_REQUEST = 2;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.persona_fragment, null);
        setHasOptionsMenu(true);

        personaAdapter = new PersonaAdapter(getActivity(), personeList, R.layout.persona_row_layout);
        personeListView = view.findViewById(R.id.lvPersone);
        personeListView.setAdapter(personaAdapter);

        blsRequest request = new blsRequest(getActivity(), blsVolleyResponse());
        request.add(blsUrl.listaPersone(), "00");

        return view;
    }

    private void startFilterActivity() {
        Intent intent = new Intent(getActivity(), PersonaFilterActivity.class);
        intent.putStringArrayListExtra("listIdClas", this.listIdClas);
        startActivityForResult(intent, FILTER_REQUEST);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {     
        if (requestCode == FILTER_REQUEST) {
            if (resultCode == RESULT_OK) {
                this.listIdClas = data.getStringArrayListExtra("listIdClas");
                personaAdapter.filterManual(this.listIdClas);
            }
        }
    }

    private blsVolleyResponse blsVolleyResponse() {
        return new blsVolleyResponse() {
            @Override
            public void onResponse(String result, String tag) {
                switch (tag) {
                    case "00":
                        personeList = blsJSON.ParseList(result, tag);
                        personaAdapter.updateData(personeList);
                        break;
                }
            }

            @Override
            public void onError(VolleyError error, String tag) {
                Toast.makeText(getActivity(), "Ops! Qualcosa è andato storto", Toast.LENGTH_SHORT).show();
                blsLog.i("blsVolleyResponse.onError: TAG = " + tag + " ERROR = " + error);
            }
        };
    }
}
public class PersonaFilterActivity extends AppCompatActivity {
    private ClasseAdapter classeAdapter;
    private ListView classiListView;
    private ArrayList<Classe> classiList = new ArrayList<Classe>();
    private ArrayList<String> listIdClas = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.persona_filter_activity);

        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            listIdClas = extras.getStringArrayList("listIdClas");
        }

        classiListView = findViewById(R.id.lvClassi);
        classeAdapter = new ClasseAdapter(this, classiList);
        classiListView.setAdapter(classeAdapter);
        classiListView.addOnLayoutChangeListener(onListLoaded);

        blsRequest request = new blsRequest(this, blsVolleyResponse());
        request.add(blsUrl.listaClassi(), "00");
    }

    private View.OnLayoutChangeListener onListLoaded = new View.OnLayoutChangeListener() {
        @Override
        public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
            setFilter();
        }
    };

    private void applyFilter() {
        fillListId();

        Intent returnIntent = new Intent();
        returnIntent.putStringArrayListExtra("listIdClas", listIdClas);
        setResult(Activity.RESULT_OK, returnIntent);
        finish();
    }

    private void fillListId() {
        listIdClas.clear();

        for (int i = 0; i < classiListView.getChildCount(); i++) {
            View child = classiListView.getChildAt(i);
            Classe classe = (Classe) classiListView.getItemAtPosition(i);
            Switch aSwitch = child.findViewById(R.id.swFlt);

            if (aSwitch.isChecked())
                listIdClas.add(classe.getId());
        }

    }

    private void ReturnValue(int Result) {
        Intent returnIntent = new Intent();
        setResult(Result, returnIntent);
        finish();
    }

    private void clearFilter() {
        listIdClas.clear();

        for (int i = 0; i < classiListView.getChildCount(); i++) {
            View child = classiListView.getChildAt(i);
            Switch aSwitch = child.findViewById(R.id.swFlt);
            aSwitch.setChecked(false);
        }
    }

    private void setFilter() {
        for (int i = 0; i < classiListView.getChildCount(); i++) {
            for (String idCat : listIdClas) {
                View child = classiListView.getChildAt(i);
                Switch aSwitch = child.findViewById(R.id.swFlt);
                Classe classe = (Classe) classiListView.getItemAtPosition(i);

                if (classe.getId().compareTo(idCat) == 0)
                    aSwitch.setChecked(true);
            }
        }
    }

    private blsVolleyResponse blsVolleyResponse() {
        return new blsVolleyResponse() {
            @Override
            public void onResponse(String result, String tag) {
                switch (tag) {
                    case "00":
                        classiList = blsJSON.ParseList(result, tag);
                        classeAdapter.updateData(classiList);
                        break;
                }
            }

            @Override
            public void onError(VolleyError error, String tag) {
                Toast.makeText(PersonaFilterActivity.this, "Ops! Qualcosa è andato storto", Toast.LENGTH_SHORT).show();
                blsLog.i("blsVolleyResponse.onError: TAG = " + tag + " ERROR = " + error);
            }
        };
    }
}
但是

因为filter listview上有很多项,如果使用“getCount()”会出现如下错误: “尝试在空对象引用上调用虚拟方法'android.view.view android.view.view.findViewById(int)'”

过滤listview的自定义适配器没有任何问题:使用数组列表存储我选择的行id,并将它们应用于第一个活动listview。现在,我需要打开第二个活动并为每一行设置已选中的开关对象(如果已选中/未选中),但当我重新单击筛选器按钮添加其他筛选器时,由于使用“getChildCount()”,筛选器项的listview未正确还原

希望我是清楚的。我该怎么做

classiListView.getCount()
classiListView.getChildCount()