-2

我需要创建一个ListViewTableLayout每行由 3 列和 3 个按钮组成,类似于:

在此处输入图像描述

但屏幕不仅会包含此控件,还会包含文本字段和其他布局,我需要一个网格来呈现如下形状(例如)。

关于如何实现这一目标以及如何处理Button点击的任何想法?由于我是 Android 新手,我不知道如何创建它。

在此处输入图像描述

4

3 回答 3

7

AListView主要用于可变数据。如果您有某种数据可以每次都以相同的方式显示并且可以增长/删除,那么 ListView 是一个不错的选择。

另一方面,如果您有静态数据,静态布局(如 TableLayout、LinearLayout 等)是一个不错的选择。这完全取决于您拥有哪些数据以及您希望如何使用它。

我希望你不想在那个截图上做同样的列,因为你在智能手机上没有那个空间。

假设您需要 3 列,并且该数据是可变的。

您可以在根目录中使用带有a 的costum ListView和. 然后,您插入的每个元素都需要与. 这种组合保证了行上的每个元素都具有相同的宽度,因此它是可选的。LinearLayoutandroid:orientation="horizontallayout_weight="1"android:layout_width="0dp"ListView

你的服装列表行应该是这样的:

<LinearLayout
    android:layout_width="fill_parent"
    ...
    android:orientation="horizontal" >
<TextView
   android:layout_width="0dp"
   ...
   android:layout_weight="1" />
...

要处理按钮单击,您需要在您的服装 ListView 上的适配器内setOnClickListener的方法中获取它时在 Button 中执行。getView

然后您可能会在单击按钮和 ListView 时遇到问题。解决此问题的常用方法是将按钮放在android:focusable="false"声明它的 xml 中。但一次一件事;)

编辑(因为评论:添加一个禁用/启用按钮的复选框):

如果你想要一个复选框来禁用/启用按钮,你需要在你getView的服装 ListView 的适配器上做一些工作。

你需要:

  • 使用类似的方式获取您的复选框:CheckBox myCheckBox = (CheckBox) inflater.findViewById(R.id.checkboxid)其中充气器是您在 getView 中定义的那个,而 checkboxid 是您在 xml 行中定义的 id。
  • 将按钮保存在您的复选框侦听器中可以访问:myCheckBox.setTag(button)按钮是您要启用/禁用的按钮,您可以像获得 myCheckBox 一样获得他
  • 在您的复选框上设置一个setOnCheckedChangeListener,您可以根据复选框的状态更改按钮的可见性。

最后一个项目符号听起来应该是这样的:

myCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        Button myButton = (Button) buttonView.getTag();

        if ( isChecked ) 
            myButton.setVisibility(View.VISIBLE);
        else
            // Use GONE if you want to get that space for other views
            myButton.setVisibility(View.GONE); 

    }
});
于 2012-05-14T08:47:28.173 回答
1

我建议你看看这样的应用程序,因为你是 android 新手,然后也看看一些应用程序、教程和控件,没有人能告诉你如何制作这个应用程序,如果它是一个错误或什么的,那么它会回答的。但是你的问题真的很广泛。它不是应用程序的问题,而是如何开发整个应用程序的问题。我认为更好,您也可以查看一些应用程序或此链接。对你有一个开始使用 android 会有帮助。

于 2012-05-12T07:26:15.467 回答
0

我为您提供问题的完整实现。首先在您的 xml 中创建一个列表视图

文件名:Yourlist.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearlayout_id"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" 
        android:background="@color/encode_view">

    <ListView
        android:id="@+id/info_list_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_above="@+id/cancelinfobtn_id" >
    </ListView>

    </RelativeLayout>

之后再创建一个带有一个文本框和一个按钮的xml

文件名=youCustomlayout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            />

    </RelativeLayout>

现在创建一个这样的自定义列表

    package com.menu.in;

    import java.util.ArrayList;

    import com.daffodilsw.client.android.R;



    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.SectionIndexer;
    import android.widget.TextView;

    public class MyContactAdapter extends ArrayAdapter {
    ArrayList<String> userContact_List,userheading_list;
    private Context mcontext;   
    private View rowview;
    LayoutInflater inflater;
    public static ArrayList<Boolean > itemchecked=new ArrayList<Boolean>();
    public MyContactAdapter(Context context, ArrayList< String> usercontactheading_list,ArrayList<String> usercontactheading_list ) {
        super(context,R.layout.yourcustomlayout,usercontactheading_list);


        userheading_list=new ArrayList<String>();

        userheading_list=usercontactheading_list;
        mcontext=context;
         inflater = (LayoutInflater) mcontext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

        public View getView(final int position, View convertView, ViewGroup parent) {
             rowview=convertView;
            if(convertView==null)
            {
                rowview = inflater.inflate(R.layout.detail_value_layout, parent, false);
            }

            TextView textView_heading = (TextView) rowview.findViewById(R.id.textView1);

            Button btn=(Button) rowview.findbyviewid(R.id.Button1);

            checkbox_detail.setOnClickListener(new OnClickListener() {
            textView_heading.setText(userheading_list.get(position));

          return rowview;
        }   


                }

最后在您的主要活动中制作一个适配器,然后调用适配器的构造函数并在您的列表视图中设置此适配器。

于 2012-05-19T11:24:56.357 回答