Android Listview项目单击

时间:2014-07-22 17:37:00

标签: android android-listview baseadapter listviewitem

我有一个listview,其中包含一个自定义BaseAdapter,用于填充json / internet中的listview项目。

在每个listview项目中,我都有一个伪按钮(FrameLayouts),附带有点击事件。单击“MAYBE”时,我会调用服务器并将事件状态更改为“Maybe”。呼叫回来后成功,我想将FrameLayouts背景更改为适当的颜色(Orange for Maybe)。

我遇到困难的地方是引用其他/相邻的FrameLayouts,这样我就可以将其背景改为“中立”。

enter image description here

我的所有事件都在BaseAdapter中,我在GetView方法中设置onClick事件。

我的问题是:是否有更好的方法/如何为每个FrameLayout设置onclick事件,因此单击的FrameLayout知道其他相邻FrameLayouts的click事件,因此我可以将其背景更改为中性并将所选背景更改为受尊重的颜色。

感谢。

4 个答案:

答案 0 :(得分:1)

您可以使用选择器来操纵视图的状态

1)创建一个选择器来设置颜色和状态

<?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android" >
       <item android:drawable="@android:color/black" android:state_selected="false"/>
       <item android:drawable="@android:color/white" android:state_selected="true"/>
   </selector>

2)在背景上设置选择器

<FrameLayout 
    ...      
       android:clickable="true"
       android:background="@drawable/selector_view">
   </FrameLayout>

3)在代码部分尝试使用此

@Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       view.setSelected(true);
       ...
   }

答案 1 :(得分:0)

adapter getView()方法中执行此操作。因此,它将应用于当前ListView

上的所有View项目
// change the row color based on selected position
if(selectedItem == position){
    layout.setBackgroundColor(Color.WHITE);
}
else
{
    layout.setBackgroundColor(Color.BLACK);
}

答案 2 :(得分:0)

为行中的每个项目注册相同的onClickListener()

onClickListener()实施到BaseAdapter类,并在其中放置逻辑,如果单击MAYBE,则循环List<Item> itemList的每个ListView,设置一个布尔值(例如otherSelected)对于每个布尔值为真,然后invalidate()ListView,并确保getView()回调您使用{处理这些项目{1}}设置为true,并在返回之前更改其视图背景。

答案 3 :(得分:0)

在你的XML中

将theese属性添加到你的FrameLayout(按钮)

android:clickable="true"
android:onClick="onMaybeClick"

然后在baseAdapter getView()方法中找到FrameLayout by

FrameLayout maybeBtn = (FrameLayout)convertView.findViewById(R.id.list_item_maybe_btn);
maybeBtn.setTag(4257 + postion);

您也可以在maybeBtn而不是XML中设置getView() onClickable,clicklistener也是如此。

在您的活动中,您可以创建onButtonClick(View v)方法

public void onMaybeClick(View v)
{
   int position = (Integer)((FrameLayout)v).getTag() - 4257; //To get the position of the click

   LinearLayout parent = (LinearLayout)v.getParent();

   FrameLayout btnYes = (FrameLayout)parent.getChildAt(0); //first button
   FrameLayout btnNo = (FrameLayout)parent.getChildAt(2); //second button

   ServerCallback(new requestListener(){
       ifSuccess(){
           v.setBackground(...);
       }
   ]);
}