如何将创建的数组从Custom适配器类传递给其他类?

时间:2017-05-09 07:15:37

标签: java android arraylist

我正在尝试将自定义数组类中的String列表传递给另一个类,但出于某种原因,当我尝试访问该列表时,它总是显示为空。

这是我的自定义适配器类:

import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


public class CustomAdapter extends ArrayAdapter {

    private final List<Model> orders;
    private final Context context;
    boolean checkAll_flag = false;
    boolean checkItem_flag = false;
    public List<String> selectedItems = new ArrayList<>();


    public CustomAdapter(@NonNull Context context, List<Model> orders) {

        super(context, R.layout.company_list_order, orders);
        this.context = context;
        this.orders = orders;

    }


    static class ViewHolder {
        protected TextView orderText;
        protected CheckBox checkOrder;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        ViewHolder viewHolder;
        selectedItems = new ArrayList<>();
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.company_list_order, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.orderText = (TextView) convertView.findViewById(R.id.textViewList);
            viewHolder.checkOrder = (CheckBox) convertView.findViewById(R.id.listCheckBox);

            viewHolder.checkOrder.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    int getPosition = (Integer) buttonView.getTag();
                    orders.get(getPosition).setSelected(buttonView.isChecked());
                    if (orders.get(getPosition).isSelected()) {
                        selectedItems.add(orders.get(getPosition).getName());
                        Log.d("Add", "Item added: " + orders.get(getPosition).getName());
                        Log.d("Size", "Selected items " + selectedItems.size());
                    } else {
                        selectedItems.remove(orders.get(getPosition).getName());
                        Log.d("Remove", "Item removed: " + orders.get(getPosition).getName());
                        Log.d("Size", "Selected items " + selectedItems.size());
                    }
                }
            });
            convertView.setTag(viewHolder);
            convertView.setTag(R.id.textViewList, viewHolder.orderText);
            convertView.setTag(R.id.listCheckBox, viewHolder.checkOrder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.checkOrder.setTag(position);

        viewHolder.orderText.setText(orders.get(position).getName());
        viewHolder.checkOrder.setChecked(orders.get(position).isSelected());

        return convertView;

    }

    public List<String> getListItems() {
        return selectedItems;
    }
}

在底部我有返回列表的方法。我应该如何在另一个班级中访问它?

1 个答案:

答案 0 :(得分:0)

可能是因为每次调用ArrayList时都会创建一个新的getView(),这被称为很多。当您调用方法getListItems()时,由于滚动listview或其他内容,之前调用方法getView()。删除行

selectedItems = new ArrayList<>();

来自getView()方法。

另一个选择是创建一个带有静态变量的类来在应用程序生存期内保存该值

public class GlobalVars {
    public static List<String> selectedItems;
}