如何获取listview项目的可见和不可见的子值

时间:2017-11-09 08:53:07

标签: android listview

这个循环只返回可见的位置值。但是我需要看不见的子项的值。

for (int i = 0; i < material_issue_list.getCount(); i++) {

        View layout = materialIssueAdapter.getViewByPositio(i, material_issue_list);

                LinearLayout listItem = (LinearLayout) materialIssueAdapter.getViewByPositio(i, material_issue_list);

                String batchSTR = ((AutoCompleteTextView) listItem.findViewById(R.id.batch_AutoComplete)).getText().toString();
                String qtySTR = ((EditText) listItem.findViewById(R.id.issue_qty_ETD)).getText().toString();}

我的完整适配器类,有人帮我建议得到正确的输出。我的问题我从不可见的视图中获取空值。 只有可见值才会更新为arraylist。 提前谢谢。

public class IssueMaterialAdapter extends BaseAdapter {

private Activity activity;
public static ArrayList Dummylist;
private static LayoutInflater inflater = null;
public Resources res;
public static ArrayList<BatchNav> batchNavs_Arr;
static ArrayList<String> batch_Arr;
public static ArrayList<String> batch_data;
public static ArrayList<String> issue_qty;
LinkedHashSet<String> hashSet;
public static ArrayList<BatchModel> batchModels = new ArrayList<BatchModel>();

public static HashMap<ViewHolder, String> batch_map;
public static HashMap<ViewHolder, String> qty_map;
HashMap<String, String> mValues = new HashMap<String, String>();
ArrayList<SaveDataModel> saveDataModels;


public IssueMaterialAdapter(Activity a, ArrayList dummy) {

    activity = a;
    Dummylist = dummy;

    loadBatch();
    this.batch_map = new HashMap<>();


    inflater = (LayoutInflater) activity.
            getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}


@Override
public int getCount() {
    if (Dummylist.size() <= 0)
        return 1;
    return Dummylist.size();
}


@Override
public int getItemViewType(int position) {
    return position;
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    final ViewHolder holder;

    if (convertView == null) {
        vi = inflater.inflate(R.layout.material_issue_details_list, null);

        holder = new ViewHolder();
        holder.batch = (AutoCompleteTextView) vi.findViewById(R.id.batch_AutoComplete);
        holder.issue = (EditText) vi.findViewById(R.id.issue_qty_ET);
        holder.material_descrption = (TextView) vi.findViewById(R.id.material_desc);
        holder.unit_issue = (EditText) vi.findViewById(R.id.unit_issue_ET);
        holder.matnr = (TextView) vi.findViewById(R.id.matnr);
        holder.prdgrp = (TextView) vi.findViewById(R.id.prod_grp);
        vi.setTag(holder);

        batch_map.put(holder, "");


        FilterWithSpaceAdapter<String> farmer_co_no_adapter = new FilterWithSpaceAdapter<String>(activity,
                R.layout.custom_items, batch_Arr);
        holder.batch.setAdapter(farmer_co_no_adapter);
        holder.batch.setThreshold(1);
        vi.setTag(holder);
    } else {
        holder = (ViewHolder) vi.getTag();
    }

    if (Dummylist.size() == AgriDistributionActivity.get_materials.size()) {

        holder.material_descrption.setText(AgriDistributionActivity.get_materials.get(position));
        holder.matnr.setText(AgriDistributionActivity.get_matnr.get(position));
        holder.prdgrp.setText(AgriDistributionActivity.selected_prdgrp.get(position));

    }




    try {
        if (saveDataArr.size() > 0) {

            holder.batch.setText(saveDataArr.get(position).getBatch());
            holder.issue.setText(saveDataArr.get(position).getQty());
            holder.unit_issue.setText(saveDataArr.get(position).getQty_uom());


        }

    } catch (Exception e) {

    }


    return vi;
}


public static class ViewHolder {

    public EditText issue, unit_issue;
    public AutoCompleteTextView batch;
    public TextView material_descrption, matnr,prdgrp;


}

private void loadBatch() {
    batch_Arr = new ArrayList<String>();
    batchNavs_Arr = new ArrayList<BatchNav>();
    hashSet = new LinkedHashSet<>();


    BatchNavEntityCollection batchNavEntityCollection = BatchNavEntityCollection.getInstance();
    batchNavs_Arr = batchNavEntityCollection.getBatchOutVal();
    for (int i = 0; i < batchNavs_Arr.size(); i++) {
        String batch = batchNavs_Arr.get(i).getCharg();
        batch_Arr.add(batch);
        hashSet.addAll(batch_Arr);
        batch_Arr.clear();
        batch_Arr.addAll(hashSet);


    }
}


public View getViewByPositio(int position, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (position < firstListItemPosition || position > lastListItemPosition) {
        return listView.getAdapter().getView(position, null, listView);
    } else {
        final int childIndex = position - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
}

}

1 个答案:

答案 0 :(得分:0)

您有saveDataArr列表,其中包含您的所有数据。 如果要从活动中添加getter,可以添加一个getter,将这样的内容添加到适配器:

private SaveDataModelsendLog(int position) {
    return saveDataArr(position); 
}

这应该是诀窍,说过你应该看一下静态变量和非静态变量之间的区别,

好像你有很多人, 享受。