您的位置:首页 > 移动开发 > Android开发

android学习笔记之:利用listview达到表格数据横向排列的效果

2013-04-17 10:59 477 查看


一、实现效果如下图




二、两种实现方法


1.通过list数据源在textview中进行横向赋值操作。

Layout coding:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/detail_project1_tv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="项目"
android:textSize="20sp"
android:background="@drawable/textviewborder"
android:gravity="center"
android:textColor="@color/black" />

<TextView
android:id="@+id/detail_params1_tv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="参数"
android:textSize="20sp"
android:background="@drawable/textviewborder"
android:gravity="center"
android:textColor="@color/black"  />

<TextView
android:id="@+id/detail_project2_tv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="项目"
android:textSize="20sp"
android:background="@drawable/textviewborder"
android:gravity="center"
android:textColor="@color/black" />

<TextView
android:id="@+id/detail_params2_tv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="参数"
android:textSize="20sp"
android:background="@drawable/textviewborder"
android:gravity="center"
android:textColor="@color/black" />

</LinearLayout>
给textview加上边框:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#00000000" />
<stroke android:width="2dip" android:color="#3B536E" />
</shape>
Adapter
coding:

public class OrderMealDetailAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public Context context;
public List<NutrientContent> nutrientList = null;

public OrderMealDetailAdapter(Context context) {
this.context = context;
this.mInflater = LayoutInflater.from(this.context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
if (nutrientList != null)
return nutrientList.size();
else
return 0;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
if (nutrientList != null)
return nutrientList.get(position);
else
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
if (nutrientList != null)
return position;
else
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.ordermeal_detail_item,
null);
holder = new Holder();
holder.detail_project1_tv = (TextView) convertView
.findViewById(R.id.detail_project1_tv);
holder.detail_params1_tv = (TextView) convertView
.findViewById(R.id.detail_params1_tv);
holder.detail_project2_tv = (TextView) convertView
.findViewById(R.id.detail_project2_tv);
holder.detail_params2_tv = (TextView) convertView
.findViewById(R.id.detail_params2_tv);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}

  //换行进行横向数据填充
if (position % 2 == 0) {
//填充一行中前两个元素
holder.detail_project1_tv
.setText(nutrientList.get(position).project);
holder.detail_params1_tv
.setText(nutrientList.get(position).element);
holder.detail_project1_tv.setVisibility(View.VISIBLE);
holder.detail_params1_tv.setVisibility(View.VISIBLE);
//填充一行中后两个元素
if (nutrientList.size() > position + 1) {
holder.detail_project2_tv.setText(nutrientList
.get(position + 1).project);
holder.detail_params2_tv
.setText(nutrientList.get(position + 1).element);
holder.detail_project2_tv.setVisibility(View.VISIBLE);
holder.detail_params2_tv.setVisibility(View.VISIBLE);
} else {
//没有可填充数据
holder.detail_project2_tv.setText("");
holder.detail_params2_tv.setText("");
}
} else {
//把后一行的数据移到前一行来,后一行隐藏操作
holder.detail_project1_tv.setVisibility(View.GONE);
holder.detail_params1_tv.setVisibility(View.GONE);
holder.detail_project2_tv.setVisibility(View.GONE);
holder.detail_params2_tv.setVisibility(View.GONE);
}
return convertView;
}

class Holder {
TextView detail_project1_tv; // 项目1
TextView detail_params1_tv; // 参数1
TextView detail_project2_tv;
TextView detail_params2_tv;
}

// 退出
public void exit() {
nutrientList = null;
notifyDataSetChanged();
mInflater = null;
context = null;
}


2.通过循环,迭代tablerow进行横向赋值

1


代码这里就不贴了。。。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: