2013-10-06 145 views
0

我有一个带有自定义BaseAdapter的ListView,用于呈现公交车号,出发地和目的地。点击一行时,我想让原点和目的地消失并显示两个按钮。我通过适配器上的clicklisteners完成了这项工作,但我需要它一次显示一个项目上的两个按钮(当选择不同的行时隐藏它们)。在ListView中只选择一个项目

这非常类似于Android的Twitter应用程序。我试图使用MultiChoiceModeListener来做到这一点,尽管我觉得这不是我想要的。

这是在适配器布局

busLabel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      LinearLayout parent = (LinearLayout) (v.getParent()); 
      parent.findViewById(R.id.bus_selector).setVisibility(View.GONE); 
      parent.findViewById(R.id.bus_description).setVisibility(View.VISIBLE); 
     } 
    }); 

XML文件

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

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/bus_label" 
     android:orientation="vertical" 
     android:layout_height="@dimen/busline_height" 
     android:layout_width="@dimen/busline_width"> 

     <TextView 
      android:id="@+id/bus_number" 
      android:layout_width="fill_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:singleLine="true" 
      android:textSize="26sp" 
      android:textStyle="bold" 
      android:textColor="@color/regularbusfg" 
      android:background="@color/regularbusbg" 
      android:gravity="center" /> 

    </LinearLayout> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/bus_description" 
     android:visibility="visible" 
     android:orientation="vertical" 
     android:paddingLeft="6dip" 
     android:paddingRight="6dip" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"> 

     <TextView 
      android:id="@+id/bus_origin" 
      android:layout_width="fill_parent" 
      android:layout_height="0dip" 
      android:layout_weight="1" 
      android:singleLine="true" 
      android:textSize="18sp" 
      android:textColor="@android:color/black" 
      android:ellipsize="end" 
      android:gravity="center_vertical" /> 

     <TextView 
      android:id="@+id/bus_destination" 
      android:layout_width="fill_parent" 
      android:layout_height="0dip" 
      android:layout_weight="1" 
      android:singleLine="true" 
      android:textSize="18sp" 
      android:textColor="@android:color/black" 
      android:ellipsize="end" 
      android:gravity="center_vertical" /> 

    </LinearLayout> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/bus_selector" 
     android:visibility="gone" 
     android:background="@drawable/border" 
     android:textColor="@color/darkgreyfg" 
     android:orientation="horizontal" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"> 

     <TextView 
      android:id="@+id/bus_going" 
      android:text="@string/going" 
      android:textAllCaps="true" 
      android:textStyle="bold" 
      android:layout_height="fill_parent" 
      android:layout_width="0dip" 
      android:layout_weight="1" 
      android:singleLine="true" 
      android:textSize="22sp" 
      android:ellipsize="end" 
      android:gravity="center" /> 

     <View 
      android:layout_width="1dp" 
      android:layout_height="fill_parent" 
      android:background="#DBDBDB"/> 

     <TextView 
      android:id="@+id/bus_coming" 
      android:text="@string/coming" 
      android:textAllCaps="true" 
      android:textStyle="bold" 
      android:layout_height="fill_parent" 
      android:layout_width="0dip" 
      android:layout_weight="1" 
      android:singleLine="true" 
      android:textSize="22sp" 
      android:ellipsize="end" 
      android:gravity="center" /> 

    </LinearLayout> 


</LinearLayout> 

我来自Web开发的getView()方法clickListener的代码和所有我需要之前是要查找选定类的元素,将其删除并将类应用于新元素。在Android上获取此行为的过程是什么?应该有一个标准或“最接受”的方式来做到这一点。

+0

您可以将代码发布到您的clickListener吗?此外,它现在在工作吗?例如,按钮是否显示,而不是隐藏另一行的按钮? – SBerg413

+0

请使用xml文件发布代码。 –

+0

难道你不能遍历列表并确保在展示新列表之前隐藏了所有列表? ...或者只是对先前选定的元素进行引用并将其隐藏在新的一个选择上。 – AnxGotta

回答

6

最简单的方法是保存用户点击的最后一个View,如果用户点击另一个项目,则可以更改您保存的最后一个视图的可见性。

busLabel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mLastView != null) 
       deselect(mLastView); 
      select(v); 
      mLastView = v; 
     } 
    }); 

private void select(View v) { 
    LinearLayout parent = (LinearLayout) (v.getParent()); 
    parent.findViewById(R.id.bus_selector).setVisibility(View.GONE); 
    parent.findViewById(R.id.bus_description).setVisibility(View.VISIBLE); 
} 

private void deselect(View v) { 
    LinearLayout parent = (LinearLayout) (v.getParent()); 
    parent.findViewById(R.id.bus_selector).setVisibility(View.VISIBLE); 
    parent.findViewById(R.id.bus_description).setVisibility(View.GONE); 
} 
+0

简单!谢谢! – manutenfruits

+0

它像一个魅力,谢谢:)节省了大量的时间 – AAnkit