2017-05-10 29 views
0

ListViewのレイアウトを、垂直方向にLinearLayoutに動的に追加しています。しかし、アプリケーションが実行されると、すべてのデータが画面上でまとめられます。スクロールしようとすると、ListViewがスクロール可能であることがわかります。をスクロールできる代わりに、ListViewごとに一度に1行しか表示されません。ここで 動的に追加されたListViewがLinearLayoutに正しく表示されないのはなぜですか?

は私が持っているものです。

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(){ 
     super.onCreate(); 
     setContentView(); 

     printSensors(); 
    } 

    private void printSensors(){ 
     SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
     ListView.LayoutParams layoutParams = new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, ListView.LayoutParams.WRAP_CONTENT); 

     LinearLayout mainLayout = (LinearLayout)findViewById(R.id.main_layout); 
     List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL); 

     for(Sensor sensor : sensorList){ 
      ListView listView = new ListView(this); 
      listView.setId(View.generateViewId()); 
      listView.setLayoutParams(layoutParams); 

      String[] sensorArray = sensor.toString().substring(1, sensor.toString().length()-1).split(","); 
      ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, sensorArray); 

      listView.setAdapter(arrayAdapter); 
      mainLayout.addView(listView); 
     } 
    } 
} 

activity_main.xml

<ScrollView> 
    <LinearLayout android:id="@+id/main_layout" android:orientation="vertical"> 
    </LinearLayout> 
</ScrollView> 

しかし、私は内にListView.LayoutParams.WRAP_CONTENTを変更した場合teger、500と言うと、すべてがうまくレイアウトされているように見えます。

だから、何ができますか?あなたのListViewの

答えて

0

変化幅は、代わりにラップコンテンツの親に一致するように、また、あなたは、ビューにスクロールするには、高さと幅を設定する必要が

+0

リストビューの幅**は** MATCH_PARENTに設定されています。さらに、「ビューをスクロールするために高さと幅を設定する必要があります」とはどういう意味ですか? – Brian

+0

なぜリストビューを動的に追加し、レイアウトに設定しないのか説明できますか?メインレイアウトにlistViewを追加してそれにアダプタを設定すると、正常に動作すると思います –

+0

センサータイプごとに 'ListView'を追加しています。アプリが実行される前に(各デバイスが異なるために)センサの数を知ることができないので、それらを動的に追加する必要があります。 – Brian

0
private void printSensors(){ 
    list = (ListView) findViewById(R.id.list); 
    ArrayList<String> sensorArray = new ArrayList<>(); 
    SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL); 
    for(Sensor sensor : sensorList){ 
     sensorArray.add(sensor.toString().substring(1, sensor.toString().length()-1).split(",").toString()); 
    } 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, sensorArray); 
    list.setAdapter(arrayAdapter); 
} 
+0

私はこの方法で試しました...うまくいきません。プリントアウトされるのは、各センサーのリソースIDだけです。 – Brian

0

ラップのLinearLayoutは、別のLinearLayoutに次のように:

<ScrollView> 
    <LinearLayout android:orientation="vertical"> 
    <LinearLayout android:id="@+id/main_layout" 
    android:orientation="vertical"> 
    </LinearLayout> 
    </LinearLayout> 
</ScrollView> 
+0

うまくいかなかった...私はまだ最初の行しか見ることができない、垂直に積まれたスクロール可能な 'ListView'ビューの束で終わります。私は両方の 'LinearLayout'ビューに対して幅と高さを' MATCH_PARENT'に設定しました。私は 'main_view''LinearLayout'に対して' WRAP_CONTENT'を試みました。 – Brian

関連する問題