我有一个默认的 ListView,我已经为列表项添加了我的自定义视图,但是这些视图中的按钮大部分时间都是不可点击的。当按钮接收到单击事件时,我会输出一个 Log.v,但是我必须点击该按钮几乎十几次才能注册单击。
我遇到的另一个与他相关的问题是,当按下按钮时,我希望发生动画,显示菜单从其下方滑出。目前我已经尝试了几种不同的方法,比如为视图创建一个自定义类,而不是只使用布局充气器来获取视图的 relativeLayout 对象,但没有任何工作正常。我什至尝试过使用listview.getAdapter().notifyDataSetChanged();
,但是当我想要动画时,它只有一个用于扩展视图的弹出位置。
我到处搜索,似乎唯一可能的解决方案是重写我自己的自定义列表视图或使用带有滚动视图的线性布局。后者似乎更容易,但我认为它几乎不像列表视图那样优化。
任何建议将不胜感激,如果您需要查看一些代码,请告诉我...
谢谢!
更新:
包含以下getView()
内容:
Holder hold;
convertView = friends.get(position);
hold = new Holder();
hold.pos = position;
convertView.setTag(hold);
return convertView;
基本上我现在将一个传递ArrayList<RelativeLayout>
给适配器,这样我就不必每次都创建一个新视图,这样当我向下滚动时动画将保持动画......
在OnCreate()
这个活动中,我ArrayList<RelativeLayout>
用下一个代码设置了它,但这只是暂时的,因为我计划稍后使用另一种方法,比如异步任务或其他东西,以便这个视图包含一些数据......
RelativeLayout temp;
for(int i=0; i<30; i++){
temp = (RelativeLayout) inflater.inflate(R.layout.list_item, null);
final LinearLayout extraListItemInfo = (LinearLayout) temp.findViewById(R.id.extraListItemInfo);
Button infoBtn = (Button) temp.findViewById(R.id.infoBtn);
infoBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Log.v("ListItem", "Button has been clicked... ");
extraListItemInfo .setVisibility(View.VISIBLE);
ExpandAnimation closeAnim = new ExpandAnimation(extraListItemInfo , animHeight);
closeAnim.setDuration(750);
closeAnim.setFillAfter(true);
if(extraListItemInfo .getTag() == null || !extraListItemInfo .getTag().equals("expanded")){
extraListItemInfo .getLayoutParams().height = 0;
friendInfoList.startAnimation(closeAnim.expand());
extraListItemInfo .setTag("expanded");
}else if(extraListItemInfo .getTag().equals("expanded")){
extraListItemInfo .startAnimation(closeAnim.collapse());
extraListItemInfo .setTag("closed");
}
//((BaseAdapter) listview.getAdapter()).notifyDataSetChanged(); i tried it here once but then left it
//as the only action inside the listview's onitemclick()
}
});
listItems.add(temp);
}
这是我正在使用的列表项:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/darkgrey"
android:paddingBottom="5dp" >
<LinearLayout
android:id="@+id/extraListItemInfo "
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/listItemInfo"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="-10dp"
android:background="@color/grey"
android:orientation="vertical"
android:visibility="gone" >
<RelativeLayout
android:id="@+id/RelativeLayout04"
android:layout_width="match_parent"
android:layout_height="@dimen/activity_list_height"
android:layout_marginTop="5dp" >
<ImageView
android:id="@+id/ImageView04"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_margin="5dp"
android:src="@drawable/logo_d" />
<TextView
android:id="@+id/TextView04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/ImageView04"
android:text="TextView"
android:textColor="@color/black"
android:textSize="17dp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/RelativeLayout03"
android:layout_width="match_parent"
android:layout_height="@dimen/activity_list_height" >
<ImageView
android:id="@+id/ImageView03"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_margin="5dp"
android:src="@drawable/logo_d" />
<TextView
android:id="@+id/TextView03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/ImageView03"
android:text="TextView"
android:textColor="@color/black"
android:textSize="17dp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/RelativeLayout02"
android:layout_width="match_parent"
android:layout_height="@dimen/activity_list_height" >
<ImageView
android:id="@+id/ImageView02"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_margin="5dp"
android:src="@drawable/logo_d" />
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/ImageView02"
android:text="TextView"
android:textColor="@color/black"
android:textSize="17dp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="match_parent"
android:layout_height="@dimen/activity_list_height" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_margin="5dp"
android:src="@drawable/logo_d" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/imageView1"
android:text="TextView"
android:textColor="@color/black"
android:textSize="17dp" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/RelativeLayout01"
android:layout_width="match_parent"
android:layout_height="@dimen/activity_list_height">
<ImageView
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_margin="5dp"
android:src="@drawable/logo_d" />
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/ImageView01"
android:text="TextView"
android:textColor="@color/black"
android:textSize="17dp" />
</RelativeLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/listItemInfo"
android:layout_width="wrap_content"
android:layout_height="95dp"
android:background="@drawable/friend_cell_background2x"
android:clickable="true" >
<RelativeLayout
android:id="@+id/leftLayout"
android:layout_width="90dp"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imgCompany"
android:layout_width="60dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:scaleType="centerInside"
android:src="@drawable/user2x" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:scaleType="fitXY"
android:src="@drawable/online_indicator2s" />
</RelativeLayout>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/leftLayout"
android:background="@android:color/transparent"
android:gravity="left|center"
android:orientation="vertical"
android:paddingLeft="5dp" >
<TextView
android:id="@+id/lblCompanyName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Contact Name"
android:textColor="@color/white"
android:textSize="18dp"
android:textStyle="bold" >
</TextView>
<TextView
android:id="@+id/lblReawrdDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Last Played Offer"
android:textColor="@color/white"
android:textSize="17dp" >
</TextView>
</LinearLayout>
<ImageView
android:id="@+id/imageView4"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="5dp"
android:src="@drawable/facebook_btn2x" />
<Button
android:id="@+id/infoBtn"
style="?android:attr/buttonStyleSmall"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/imageView4"
android:background="@drawable/info_btn2x"
android:clickable="true" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="13dp"
android:layout_toLeftOf="@+id/infoBtn"
android:text="Follows 30+"
android:textColor="@color/white"
android:textSize="11dp" />
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="75dp"
android:layout_height="20dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:layout_toLeftOf="@+id/textView2"
android:background="@drawable/fan_btn2x"
android:text="Fans 30+"
android:textColor="@color/white"
android:textSize="11dp" />
<ImageView
android:id="@+id/imageView5"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/imageView4"
android:src="@drawable/google_btn2x" />
</RelativeLayout>
</RelativeLayout>
抱歉,任何可能使事情难以阅读的布局问题...但我希望这可以帮助你们理解我的问题...谢谢
更新 2:
所有这些答案在某种程度上都有帮助,但我认为我必须首先解决的主要问题是为什么在我首先滚动离开该 listItem,然后返回它,然后单击按钮之前,按钮不会收到点击事件再次......如果有人可以帮助找到解决方案,我认为其他一切都会更容易解决......谢谢......
根据要求提供屏幕截图,但请记住,这张照片是在三星 Galaxy Tab 10.1 上拍摄的,由于我在这个更大的屏幕上使用了相同的布局,它看起来与我通常测试的手机(摩托罗拉 droid x那不是root,不能截图...)
另一个更新:通过扩展 ArrayAdapter 而不是基本适配器,我设法使点击和动画效果很好。可悲的是,我仍然遇到问题,因为只有列表的下半部分是可点击的。列表的上半部分仍然像以前一样出现非常故障的点击事件......关于这次发生的事情有什么想法吗?谢谢...