如何使结果在ListView上可见?

时间:2015-07-09 09:52:14

标签: android listview multidimensional-array android-listview adapter

我想问一下,如何让活动read()看到函数ListView的结果。我尝试了几个适配器,但没有留下没有结果。这是我的代码:

public class ScanFileResultsActivity extends ListActivity implements View.OnClickListener {

private static final String TAG = "BC FileManipulator";
String[][] arrays = read();


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

public String[][] read() {
    try {
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/barcodedata");
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        final String filename = prefs.getString("prefdbname", null) + ".xls";
        File myFile = new File(myDir, filename);

        WorkbookSettings ws = new WorkbookSettings();
        ws.setLocale(new Locale("en", "EN"));
        Workbook workbook = Workbook.getWorkbook(myFile);

        Sheet s = workbook.getSheet(0);
        int rows = s.getRows();

        String[][] result = new String[rows][];
        for (int i = 0; i < rows; i++) {
            Cell[] row = s.getRow(i);

            result[i] = new String[row.length];
            for (int j = 0; j < row.length; j++) {
                result[i][j] = row[j].getContents();
            }
        }
        return result;

    } catch (IOException | BiffException e) {
        Log.v(TAG, "Error");
    }
    return null;
}
...
}

1 个答案:

答案 0 :(得分:0)

你应该使用ListAdapter中的一个。尝试实现BaseAdapter。这样的事情:

private class ActivityMy extends ListActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout);
        setListAdapter(new CustomAdapter(this, readData()));

    }

    private List<DataItem> readData() {
        //TODO: Your read method....
        return null;
    }

    private class DataItem {
        public String name; //For example
        public String age;
    }
}

和适配器:

    public class CustomAdapter extends BaseAdapter {
        private Context context;
        private List<DataItem> items;

        public CustomAdapter(Context context, List<DataItem> items) {
            this.context = context;
            this.items = items;
        }

        @Override
        public int getCount() {
            return items.size();
        }

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

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;

            if(convertView==null){
                LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                convertView = inflater.inflate(listItemLayoutId, parent, false);

                viewHolder = new ViewHolder();
                viewHolder.nameField = (TextView) convertView.findViewById(R.id.nameField);
                viewHolder.ageField = (TextView) convertView.findViewById(R.id.ageField);
                convertView.setTag(viewHolder);

            }else{
                viewHolder = (ViewHolder) convertView.getTag();
            }

            DataItem objectItem = (DataItem) getItem(position);

            if(objectItem != null) {
                viewHolder.nameField.setText(objectItem.name);
                viewHolder.ageField.setTag(objectItem.age);
            }
            return convertView;
        }

        private class ViewHolder {
            private TextView nameField;
            private TextView ageField;
        }
    }