Android 自定义“ListView”还是表格布局?

Android 自定义“ListView”还是表格布局?,android,android-listview,android-tablelayout,Android,Android Listview,Android Tablelayout,我需要创建一个列表视图或表格布局,每行由3列和3个按钮组成,类似于: 但屏幕将不仅包含此控件,还将包含文本字段和其他布局,我需要一个网格,其形状如下所示(例如) 有没有关于如何实现这一点以及如何处理点击按钮的想法? 由于我对安卓系统还不熟悉,我不知道如何创建它 我建议你看看这样的应用程序,因为你刚接触安卓系统,然后也看了一些应用程序、教程和控件,没有人能告诉你如何制作这个应用程序,如果它是一个bug或什么的,那么它将负责。但你的问题真的很大。这不是一个应用程序的问题,而是如何开发整个应用程序的

我需要创建一个
列表视图
表格布局
,每行由3列和3个按钮组成,类似于:

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

有没有关于如何实现这一点以及如何处理点击按钮的想法? 由于我对安卓系统还不熟悉,我不知道如何创建它


我建议你看看这样的应用程序,因为你刚接触安卓系统,然后也看了一些应用程序、教程和控件,没有人能告诉你如何制作这个应用程序,如果它是一个bug或什么的,那么它将负责。但你的问题真的很大。这不是一个应用程序的问题,而是如何开发整个应用程序的问题。我认为更好的办法是,你看看一些应用程序或者这个。对你来说,开始使用安卓系统会很有帮助。

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

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

我希望你不想在屏幕截图上做同样的专栏,因为你在智能手机上没有这样的空间

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

您可以使用根目录中带有
LinearLayout
的a和
android:orientation=“horizontal
。然后插入的每个元素都需要使用
layout\u weight=“1”
android:layout\u width=“0dp”“
。这种组合保证了
ListView
行中的每个元素都具有相同的宽度,因此它是可选的

您的肋骨列表行应如下所示:

<LinearLayout
    android:layout_width="fill_parent"
    ...
    android:orientation="horizontal" >
<TextView
   android:layout_width="0dp"
   ...
   android:layout_weight="1" />
...
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); 

    }
});

我为您提供问题的完整实现。首先在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,如下所示

Filename=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;
        }   


                }
package com.menu.in;
导入java.util.ArrayList;
导入com.daffodillsw.client.android.R;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.CheckBox;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.SectionIndexer;
导入android.widget.TextView;
公共类MyContactAdapter扩展了ArrayAdapter{
ArrayList用户联系人列表、用户标题列表;
私有上下文;
私有视图行视图;
充气机;
public static ArrayList itemchecked=new ArrayList();
公共MyContactAdapter(上下文上下文,ArrayListusercontactheading\u列表,ArrayList usercontactheading\u列表){
super(context,R.layout.yourcustomlayout,usercontactheading\u list);
userheading_list=new ArrayList();
userheading_列表=usercontactheading_列表;
mcontext=上下文;
充气机=(充气机)mcontext
.getSystemService(上下文布局\充气机\服务);
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
rowview=convertView;
if(convertView==null)
{
rowview=充气机。充气(R.layout.detail\u value\u layout,父级,false);
}
TextView TextView_heading=(TextView)rowview.findViewById(R.id.textView1);
按钮btn=(按钮)行视图.findbyviewid(R.id.Button1);
复选框\u detail.setOnClickListener(新的OnClickListener(){
textView_heading.setText(userheading_list.get(position));
返回行视图;
}   
}

最后在您的主活动中创建一个适配器,然后调用适配器的构造函数并在listview中设置此适配器。

您只有这3行,否则它将增加。.还有一件事是,当您在“展开”按钮上创建时,它将显示更多视图…编辑并改进您的问题,如果您希望用户帮助您。这两个图像是怎么回事?(如果你提供一个你想要的整个布局的草图就更好了)。处理
按钮
点击?在哪里?你想在点击事件上做什么?等等。如果我想添加复选框,以便在点击时激活行上的按钮,反之亦然,最好重新考虑如果你正在使用列表视图,那么在你的肋骨行上,你会得到带有
findViewById
的复选框。你需要
设置复选框ChangeListener
在该侦听器上,当复选框更改为选中或未选中时,您可以进行检查。但是,我相信您需要在该侦听器上执行一个简单的操作。在getView上,您需要执行
view.setTag(按钮)
。本例中的视图是您要返回的视图,而按钮是您要禁用/启用的按钮。您需要这样做,才能在为复选框定义的侦听器上获得按钮。您可以让按钮执行
view.getTag()
我对此一无所知,你能更新答案并给我举个例子吗请更新答案。请尝试做一些事情,否则会让人困惑。从costum ListView开始,然后当你拥有所有想要的外观时,点击复选框启用/禁用按钮。这实际上是两个不同的问题。不要尝试这样做马上说错话。@AMH只是警告你,即使你不把赏金给某些人,你的赏金也会丢失