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只是警告你,即使你不把赏金给某些人,你的赏金也会丢失