在可见和不可见之间切换填充的列表视图
Toggling a populated list view between visible and invisible
我创建了一个简单的列表视图,其中包含两个不同的文本视图(如下所示)。我想要一系列的行,这些行在单击时会显示更多信息——一个隐藏的文本视图可以通过单击另一个文本视图来切换。我认为我的问题可能是封装两个文本视图的线性布局,但我不确定。 slide_up 和 slide_down 动画是从网站上截取的基本动画。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:textSize="20sp"
android:clickable="true"
android:onClick="toggle_contents"/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="example"
android:textSize="20sp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
</LinearLayout>
列表视图由内容提供者填充,如下所示:
cursor.moveToFirst();
ArrayList<String> listItems = new ArrayList<String>();
ArrayList<String> listItems2 = new ArrayList<String>();
// listItems = new ArrayList<ListItem>();
ListView mylist=(ListView) findViewById(R.id.list);
do{
String id=cursor.getString(cursor.getColumnIndex("id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
// String name_str = id +" : "+ name;
listItems2.add(id);
listItems.add(name);
cursor.moveToNext();
}while(!cursor.isAfterLast());
CustomListAdapter adapter=new CustomListAdapter(this, listItems2, listItems);
mylist.setAdapter(adapter);
我想通过向上滑动和向下滑动动画在可见和不可见之间切换:
public void toggleContents(View v){
if(txt_hidden.isShown()){
slide_up(this, txt_hidden);
txt_hidden.setVisibility(View.GONE);
}
else{
txt_hidden.setVisibility(View.VISIBLE);
slide_down(this, txt_hidden);
}
//txt_hidden.setVisibility(txt_hidden.isShown()? View.GONE : View.VISIBLE);
}
@Override
public void onDestroy() {
super.onDestroy();
}
public static void slide_down(Context ctx, View v){
Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_down);
if(a != null){
a.reset();
if(v != null){
v.clearAnimation();
v.startAnimation(a);
}
}
}
public static void slide_up(Context ctx, View v){
Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_up);
if(a != null){
a.reset();
if(v != null){
v.clearAnimation();
v.startAnimation(a);
}
}
}
将标签添加到您设置 OnClickListener() 的视图,以便在另一个视图上使用动画
...
view.setOnClickListener(this);
view.setTag(textViewToShowOnClick);
...
public void onClick(View v){
...
TexView textViewToShowOnClick = (TextView) v.getTag();
v.slideUp(...);
...
}
如何设置 txt_hidden
变量?我相信它指向的视图可能与您实际尝试更改其可见性的视图不同。
我建议您不要在 xml 文件中设置点击侦听器,而是在构建列表项视图时在适配器的 getView() 中设置:
private class ViewHolder
{
TextView mTextView1;
TextView mTextView2
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_view_item_1, parent, false);
viewHolder = new ViewHolder();
viewHolder.mTextView1 = (TextView)convertView.findViewById(R.id.text1);
viewHolder.mTextView2 = (TextView)convertView.findViewById(R.id.text2);
viewHolder.mTextView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do your animation here
}
});
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.mTextView1.setText(mElements1.get(position));
viewHolder.mTextView2.setText(mElements2.get(position));
return convertView;
}
我创建了一个简单的列表视图,其中包含两个不同的文本视图(如下所示)。我想要一系列的行,这些行在单击时会显示更多信息——一个隐藏的文本视图可以通过单击另一个文本视图来切换。我认为我的问题可能是封装两个文本视图的线性布局,但我不确定。 slide_up 和 slide_down 动画是从网站上截取的基本动画。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:textSize="20sp"
android:clickable="true"
android:onClick="toggle_contents"/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="example"
android:textSize="20sp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"/>
</LinearLayout>
列表视图由内容提供者填充,如下所示:
cursor.moveToFirst();
ArrayList<String> listItems = new ArrayList<String>();
ArrayList<String> listItems2 = new ArrayList<String>();
// listItems = new ArrayList<ListItem>();
ListView mylist=(ListView) findViewById(R.id.list);
do{
String id=cursor.getString(cursor.getColumnIndex("id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
// String name_str = id +" : "+ name;
listItems2.add(id);
listItems.add(name);
cursor.moveToNext();
}while(!cursor.isAfterLast());
CustomListAdapter adapter=new CustomListAdapter(this, listItems2, listItems);
mylist.setAdapter(adapter);
我想通过向上滑动和向下滑动动画在可见和不可见之间切换:
public void toggleContents(View v){
if(txt_hidden.isShown()){
slide_up(this, txt_hidden);
txt_hidden.setVisibility(View.GONE);
}
else{
txt_hidden.setVisibility(View.VISIBLE);
slide_down(this, txt_hidden);
}
//txt_hidden.setVisibility(txt_hidden.isShown()? View.GONE : View.VISIBLE);
}
@Override
public void onDestroy() {
super.onDestroy();
}
public static void slide_down(Context ctx, View v){
Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_down);
if(a != null){
a.reset();
if(v != null){
v.clearAnimation();
v.startAnimation(a);
}
}
}
public static void slide_up(Context ctx, View v){
Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_up);
if(a != null){
a.reset();
if(v != null){
v.clearAnimation();
v.startAnimation(a);
}
}
}
将标签添加到您设置 OnClickListener() 的视图,以便在另一个视图上使用动画
...
view.setOnClickListener(this);
view.setTag(textViewToShowOnClick);
...
public void onClick(View v){
...
TexView textViewToShowOnClick = (TextView) v.getTag();
v.slideUp(...);
...
}
如何设置 txt_hidden
变量?我相信它指向的视图可能与您实际尝试更改其可见性的视图不同。
我建议您不要在 xml 文件中设置点击侦听器,而是在构建列表项视图时在适配器的 getView() 中设置:
private class ViewHolder
{
TextView mTextView1;
TextView mTextView2
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_view_item_1, parent, false);
viewHolder = new ViewHolder();
viewHolder.mTextView1 = (TextView)convertView.findViewById(R.id.text1);
viewHolder.mTextView2 = (TextView)convertView.findViewById(R.id.text2);
viewHolder.mTextView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do your animation here
}
});
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.mTextView1.setText(mElements1.get(position));
viewHolder.mTextView2.setText(mElements2.get(position));
return convertView;
}