【问题标题】:How set buttons below list made of textviews?如何设置由 textviews 组成的列表下方的按钮?
【发布时间】:2015-10-14 20:56:54
【问题描述】:

我正在制作一个应用程序,以在屏幕上打印具有 uuid、主要和次要值的信标列表。每个值都存储为 xml 文件中的文本视图。这很好用,但我还想在带有信标的整个列表下方设置一个带有四个按钮的表格行。但是,当我在 xml 文件中添加表格行时,带有按钮的表格会一直显示在列表中的每个位置。

示例:http://i.stack.imgur.com/HEvbC.jpg

所以我的问题是如何在由 textviews 组成的列表下方设置按钮表?

我的 xml 文件

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/device_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="24dp"/>
        <TextView android:id="@+id/device_address"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="12dp"/>
        <TextView android:id="@+id/device_uuid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="12dp"/>
        <TextView android:id="@+id/device_major"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="12dp"/>
        <TextView android:id="@+id/device_minor"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="12dp"/>

    <TableRow
        android:id="@+id/tableRow5cl"
        android:layout_width="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/newscl"
            android:layout_height="match_parent"
            android:text="News"
            android:layout_weight=".3" android:layout_width="wrap_content" android:gravity="center_horizontal"/>

        <Button
            android:id="@+id/loccl"
            android:layout_height="match_parent"
            android:text="---"
            android:layout_weight=".3" android:layout_width="wrap_content" android:gravity="center_horizontal"/>

        <Button
            android:id="@+id/leccl"
            android:layout_height="match_parent"
            android:text="----"
            android:layout_gravity="right" android:layout_weight=".3" android:layout_width="wrap_content" android:gravity="center_horizontal"/>
        <Button
            android:id="@+id/clacl"
            android:layout_height="match_parent"
            android:text="---"
            android:layout_weight=".3" android:layout_width="wrap_content" android:gravity="center_horizontal"/>


    </TableRow>

</LinearLayout>

列表适配器

private class LeDeviceListAdapter extends BaseAdapter {
    private ArrayList<IBeacon> mLeDevices;
    private LayoutInflater mInflator;

    public LeDeviceListAdapter() {
        super();
        mLeDevices = new ArrayList<IBeacon>();
        mInflator = DeviceScanActivity.this.getLayoutInflater();
    }

    public void addDevice(IBeacon device) {
        if(!mLeDevices.contains(device)) {
            mLeDevices.add(device);
        }
    }

    public IBeacon getDevice(int position) {
        return mLeDevices.get(position);
    }

    public void clear() {
        mLeDevices.clear();
    }

    @Override
    public int getCount() {
        return mLeDevices.size();
    }

    @Override
    public Object getItem(int i) {
        return mLeDevices.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        if (view == null) {
            view = mInflator.inflate(R.layout.listitem_device, null);
            viewHolder = new ViewHolder();
            viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address);
            viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name);
            viewHolder.deviceUUID = (TextView) view.findViewById(R.id.device_uuid);
            viewHolder.deviceMajor = (TextView) view.findViewById(R.id.device_major);
            viewHolder.deviceMinor = (TextView) view.findViewById(R.id.device_minor);
            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }

        IBeacon device = mLeDevices.get(i);
        final String deviceName = "Kontakt";
        if (deviceName != null && deviceName.length() > 0)
            viewHolder.deviceName.setText(deviceName);
        else
            viewHolder.deviceName.setText(R.string.unknown_device);
       //viewHolder.deviceAddress.setText(device.getAddress());
        viewHolder.deviceUUID.setText(device.getUuid());
        viewHolder.deviceMajor.setText(device.getMajor());
        viewHolder.deviceMinor.setText(device.getMinor());

        return view;
    }
}

【问题讨论】:

    标签: android xml android-layout button textview


    【解决方案1】:

    当您创建一个新行时,您使用的是包含按钮的 xml,例如,您应该分离您的行设计。

    rowBeacon.xml(在你的适配器中使用)

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
            <TextView android:id="@+id/device_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="24dp"/>
            <TextView android:id="@+id/device_address"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="12dp"/>
            <TextView android:id="@+id/device_uuid"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="12dp"/>
            <TextView android:id="@+id/device_major"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="12dp"/>
            <TextView android:id="@+id/device_minor"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="12dp"/>
    </LinearLayout>
    

    并在您的活动 (setContentView) 中使用如下内容:

    activity.xml

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <ListView
            android:id="@+id/listData"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_height="@dimen/popup_divider"
            android:background="@android:color/transparent"
            android:cacheColorHint="@android:color/transparent"
            android:dividerHeight="1dp" />
    
            <TableRow
                android:id="@+id/tableRow5cl"
                android:layout_width="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_height="wrap_content">
                <Button
                    android:id="@+id/newscl"
                    android:layout_height="match_parent"
                    android:text="News"
                    android:layout_weight=".3" android:layout_width="wrap_content" android:gravity="center_horizontal"/>
    
                <Button
                    android:id="@+id/loccl"
                    android:layout_height="match_parent"
                    android:text="---"
                    android:layout_weight=".3" android:layout_width="wrap_content" android:gravity="center_horizontal"/>
    
                <Button
                    android:id="@+id/leccl"
                    android:layout_height="match_parent"
                    android:text="----"
                    android:layout_gravity="right" android:layout_weight=".3" android:layout_width="wrap_content" android:gravity="center_horizontal"/>
                <Button
                    android:id="@+id/clacl"
                    android:layout_height="match_parent"
                    android:text="---"
                    android:layout_weight=".3" android:layout_width="wrap_content" android:gravity="center_horizontal"/>
            </TableRow>
    
        </LinearLayout>
    

    在你的班级(yourClass.java)

    ListView listData = (ListView) findViewById(R.id.listData);
    ...Build your adapter...
    
    listData.setAdapter(yourAdapter);
    

    希望对你有帮助。

    【讨论】:

    • 不,当我这样做时,我的应用程序正在停止。
    • 您可以发布异常或在哪个部分停止?
    • 这一行正在停止应用:ListView listData = (ListView) findViewById(R.id.listData);
    • 你的类是从 Activity 扩展还是扩展了什么?,在 setContenView 中,你使用的是具有 ListView 的 XML 吗?
    • 是的,在 setContenView 中,我使用的是具有 ListView 的 XML。我的课程扩展了 ListActivity
    【解决方案2】:

    好吧,您的 TableRow 位于您用于每个项目的布局中。您必须将 TableRow 放在 ListView 下方,而不是放在 ListView 项目的布局中。

    【讨论】:

    • 但是我没有定义任何列表视图,所以我应该以某种方式在 java 代码中添加它还是更改我的 xml 文件?
    • 你在使用 ListFragment 吗?
    • 不,我改变了我的问题,让您更深入地了解我的列表是如何工作的。
    • 这是我应用中唯一的 xml,我没有在 onCreate 方法中设置布局
    • 我不明白,ListView 是从哪里来的?您是否以编程方式创建它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多