2015-04-22 83 views
0

我不知道如何設置我的活動layour權。我有一個頂部按鈕的佈局,當我點擊它時,我想填充ListView來呈現一些數據(比如有序比薩餅的歷史記錄)。但是,當我點擊按鈕,我得到這個:ListView和其他元素的活動

enter image description here

我不明白爲什麼這個按鈕保存拷貝。我只想要一個在頂部。

activity_tab_history.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.example.tomek.pizzaservice.TabHistoryActivity"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Refresh" 
     android:id="@+id/buttRefresh" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:onClick="buttRefreshAction" /> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/listView" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:clickable="false" 
     android:layout_below="@+id/textViewItem" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Text" 
     android:id="@+id/textViewItem" 
     android:layout_below="@+id/buttRefresh" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 
</RelativeLayout> 

代碼:

public void buttRefreshAction(View view){ 
    listView.setAdapter(loadDataFromDatabase()); 
} 

private ArrayAdapter<String> loadDataFromDatabase(){ 
    Toast.makeText(TabHistoryActivity.this, "Loading orders", Toast.LENGTH_SHORT).show(); 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.activity_tab_history, R.id.textViewItem); 

    Random rand = new Random(); 
    for(int i=0; i<10; i++){ 
     arrayAdapter.add("Order date: 2000:01:" +(01+i)+ 
       ", pizza: " + (rand.nextInt(15)+1) + 
       ". SOME PIZZA NAME BLA BLA BLA" + 
       " Status: somthin"); 
    } 

    Toast.makeText(TabHistoryActivity.this, "Completed loading orders", Toast.LENGTH_SHORT).show(); 
    return arrayAdapter; 
} 
+0

'R.layout.activity_tab_history'是怎麼看的? – Emmanuel

+0

@Emmanuel這是我包括這個XML。 – Tomasz

+0

函數離開活動然後回來嗎? –

回答

3

您正在告訴適配器,每行的佈局與整體相同。

看看

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.activity_tab_history, R.id.textViewItem); 

給出的應該是你的行佈局的第二個項目。它應該是這樣的

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.my_row_template, R.id.textViewItem); 

和行模板是另一個佈局文件,這表明你希望每個行的樣子,在另一方面,你可以做到這一點

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1); 

其中會使用到什麼默認的Android行佈局只是一行文字

+0

'android.R.layout.simple_list_item_1'當我用它時,它給了我NullPointerException – Tomasz

+0

@Tomek哦對不起,你應該使用android.R.id.text1 。我改變了我的例子 –

+0

很好的解釋,再加上你很酷,你提供了一個例子,我不需要創建另一個佈局。謝謝。 – Tomasz

2

您正在使用的整個歷史標籤作爲ArrayAdapter您的列表項。所以每次添加時,都會通過其中的按鈕來擴大視圖。

讓您的清單項目變得簡單,只包含TextView

2

如果R.layout.activity_tab_history是包含的XML,它包含一個Button。此佈局是用作每行膨脹佈局的佈局。

您還包括每個行項目的ListView