2017-05-10 41 views
0

我正在動態地將ListView佈局添加到我的垂直面向LinearLayout。但是,當應用程序運行時,所有數據都會一起擠在屏幕上。如果我嘗試滾動,我發現每個獨立的ListView都是可滾動的,並且我只看到一行ListView,而不是我所附的LinearLayout可滾動。爲什麼我的動態添加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到中泰格,說500,然後一切奠定了很好,看起來不錯。

那麼,什麼給了?您的ListView

回答

0

變化寬度符合父母,而不是換行的內容,還必須設置高度和寬度的滾動視圖

+0

ListViews **的寬度被設置爲「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

相關問題