【发布时间】:2012-06-06 18:22:38
【问题描述】:
我有一个默认的 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 而不是基本适配器,我设法使点击和动画效果很好。可悲的是,我仍然遇到问题,因为只有列表的下半部分是可点击的。列表的上半部分仍然像以前一样出现非常故障的点击事件......关于这次发生的事情有什么想法吗?谢谢...
【问题讨论】:
-
请包含相关代码,以便我们了解单击侦听器未侦听的原因。
-
适配器的
getView()的代码是什么?此外,如果您正在膨胀行,请发布 xml。 -
在你的 xml 文件中使用 android:focasable=false 我可能会工作...
-
可聚焦的更改不起作用...似乎我无法修复我之前从其他人那里发现的错误,这是按钮的点击在视图更改之前未注册的地方,例如通过滚动事件。 ..我在日志中看到了这一点,因为我多次触摸按钮而没有任何反应,然后我滚动列表,然后由于某种原因从所有这些按钮点击中获取事件...
-
感谢您的屏幕截图。我仍然没有看到任何明显的东西,所以我会问一个基本问题。您是否尝试过将
infoBtn放大以确保您按下按钮?
标签: android android-listview android-button