2017-05-09 53 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

相關問題