如何在单击ListView行时显示子布局而不屏蔽其他行?

时间:2014-04-24 15:18:50

标签: android listview android-listview simpleadapter

我使用SimpleAdapter生成了ListView。我试图在单击列表视图行时显示一个tablerow。我希望每次单击ListView行时都会显示TableRow。我已完成以下编码,但TableRow屏蔽或占用其下方ListView行之一的空间,其次Tablerow仅显示第一行而不显示其他行。我在下面发布我的代码。请一步一步帮助我。

任务扩展了Fragment

   ListAdapter k=new SimpleAdapter(getActivity(),val,R.layout.senttaskdata,new String[]{"rname","heading","desc","id","path","receiver","sender"},new int[]{R.id.textView1,R.id.textView2,R.id.textView3,R.id.hide1,R.id.hide2,R.id.hide3,R.id.hide4})
  {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final View v = super.getView(position, convertView, parent);
        //some codes here
        return v;
    }

  };

 sent.setAdapter(k);

  sent.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        // TODO Auto-generated method stub
        TableRow colors=(TableRow)arg0.findViewById(R.id.tableRow1);
        RelativeLayout r=(RelativeLayout)arg0.findViewById(R.id.tasksent);
        r.setVisibility(arg0.VISIBLE);
        colors.setVisibility(arg0.VISIBLE);

    }
});

我的xml文件,用于将值输入List,即senttaskdata

  <?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"
    android:id="@+id/tasksent" >

<ImageView
    android:id="@+id/mypicture"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="18dp"
    android:layout_marginTop="24dp"
    android:src="@drawable/border" />


  <TableRow
    android:id="@+id/tableRow1"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textView3"
    android:layout_marginTop="25dp"
   android:visibility="invisible"
    android:background="@android:color/black" >

    <ImageView
        android:id="@+id/imageView6"
        android:layout_width="80dp"
        android:layout_height="fill_parent"
        android:background="@color/dblue"
        android:src="@drawable/ic_status" />

 </TableRow>



 </RelativeLayout>

2 个答案:

答案 0 :(得分:0)

使用visibility =“GONE”,然后您的视图不会呈现,也不会在您的布局中发生,但您可以参考它。

答案 1 :(得分:0)

如果您使用relativeLayout,则必须相对于彼此或它们所在的容器布置包括您的新子项在内的所有内容。由于您未设置布局参数,因此您的新子项将显示在其他行上。尝试使用这样的东西:

RelativeLayout.LayoutParms lp = new RelativeLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
lp.addRule(RelativeLayout.LayoutParms. layout_alignAbove, someView);

如果您使用LinearLayout,则只需设置即可     ListView布局上的android:animateLayoutChanges =“true”可以自动解决所有问题,并且可以非常干净,流畅地隐藏或暴露子项