2017-02-18 11 views
0

私がリストビューに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()である「-1」、私は効果的なレイアウトを生成する方法がわかりませんリソースID。

答えて

0

レイアウトでgenerateViewId()を呼び出していませんでした。

layout.setId(View.generateViewId()); 

ただし、SimpleAdapterにはTextView Ressourceが必要ですか?

ListViewの代わりにGridViewを使用することもできます。私はそれがより簡単だろうと思う。さらに、GridViewはあなたのセルサイズを気にします。あなたのコードでは、あなたのtextlengthに応じて各セルのセル幅が異なります。

+0

私はプログラムをsetIdで修正しますが、閉じても例外はスローされません。TextViewは新しい 'TextView textView = new TextView(this);'私は学習中です... – HaibaraAi

+0

ListViewではなくGridView。 – fijili

+0

しかし、なぜそれが動作しないのか教えていただけますか? xmlリソースIDを使用すると正しく作成されます。つまり、レイアウトxmlに30テキストビューを書き込む場合です。 – HaibaraAi

関連する問題