2017-05-09 66 views
-2

我想从我的自定义数组类中传递一个字符串列表到另一个类,但由于某种原因,当我尝试访问列表时,它似乎总是空的。如何将自定义适配器类创建的数组传递给其他类?

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

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; 
    } 
} 

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

+0

你缺少这行代码--public类CustomAdapter的扩展ArrayAdapter { –

+0

你想传递它通过意图还是不使用它? –

+0

该列表包含从我的复选框中选中的项目,我只想将选定的项目作为列表,以便我可以处理它们。 – Vennufius

回答

0

可能因为您每次创建一个新的ArrayListgetView()被称为,这被称为很多。并且,当您调用方法getListItems()时,由于滚动listview或之前调用方法getView()。从getView()方法删除行

selectedItems = new ArrayList<>(); 

另一种选择是,以与静态变量的一类应用程序生命周期中保持价值

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

我认为创建全局变量的工作。非常感谢! – Vennufius

相关问题