ListView和其他元素

时间:2015-04-22 16:55:16

标签: android listview android-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;
}

3 个答案:

答案 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行布局

答案 1 :(得分:2)

您正在使用整个历史记录标签作为ArrayAdapter中的列表项。因此,每当您添加时,您都会使用按钮为视图充气。

使您的列表项简单,只包含TextView

答案 2 :(得分:2)

如果R.layout.activity_tab_history是包含的XML,则它包含Button。这个布局是用作每行充气的布局。

您还为每个行项目添加ListView