如何在android中动态添加listview列?

时间:2017-02-18 09:24:52

标签: android listview

我想在listview中生成30列或更多,我喜欢这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView listView=(ListView)findViewById(R.id.liv);
    ArrayList<HashMap<String,String>> sourceList=new ArrayList<HashMap<String, String>>();
    ArrayList<String> from=new ArrayList<>();
    ArrayList<Integer> to = new ArrayList<>();
    int colNumber=30;
    int rowNumber=30;
    LinearLayout layout=new LinearLayout(this);
    layout.setOrientation(LinearLayout.HORIZONTAL);
    for(int i=0;i<colNumber;i++) {
        from.add("col" + i);
        TextView textView=new TextView(this);
        textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));
        layout.addView(textView);
        to.add(textView.generateViewId());
    }
    for(int j=0;j<rowNumber;j++) {
        HashMap<String, String> map = new HashMap<String, String>();
        for (int i = 0; i < colNumber; i++) {
            map.put("col" + i, i+","+j);
        }
        sourceList.add(map);
    }
    SimpleAdapter adapter=new SimpleAdapter(this,sourceList, layout.getId(),from.toArray(new String[from.size()]),Utils.ToIntsArray(to));
    listView.setAdapter(adapter);
}

但layout.getId()是&#34; -1&#34;,然后我不知道如何生成有效的布局资源ID。

1 个答案:

答案 0 :(得分:0)

你没有在布局上调用generateViewId()。

layout.setId(View.generateViewId());

但SimpleAdapter不需要TextView Ressource吗?

您可以使用GridView代替ListView。我认为这会更容易。此外,GridView会关心您的单元格大小。使用代码,每个单元格的单元格宽度会有所不同,具体取决于文本长度。