2015-05-29 57 views
0

我的应用程序主页面包含一个列表视图,每个项目都是一个高度为屏幕80%的容器,它包含许多按钮和图像视图。当我滚动列表视图并点击图标时,第一次不接受点击。如何获得像点击回复这样的ios?Listview项目内的Android按钮点击不起作用

这是getView()我的适配器

pollChoice1.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (message.getAnswered()) { 
       if (message.getScope().equals("private") && (message.getResponseCount() < 1) && message.getVisibility().equals("public")) { 
        showAlert("Not enough people have responded to display answers"); 
       } else { 
        showAlert("You have already answered this poll"); 
       } 
      } else { 
       message.setAnswered(true); 
       if ((message.getScope().equals("private") && message.getResponseCount() > 0) || message.getScope().equals("domain")) { 
        message.setOption1Count(message.getOption1Count() + 1); 
        message.setResponseCount(message.getResponseCount() + 1); 
       } 

       message.setAnswer("" + 0); 

       activity.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         UpdateMessageTask updateMessageTask = new UpdateMessageTask(message); 
         updateMessageTask.execute(); 
        } 
       }); 


       PollReply pollReply = new PollReply(message); 
       pollReply.execute(); 
      } 

     } 
    }); 

    pollChoice2.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (message.getAnswered()) { 
       if (message.getScope().equals("private") && (message.getResponseCount() < 1) && message.getVisibility().equals("public")) { 
        showAlert("Not enough people have responded to display answers"); 
       } else { 
        showAlert("You have already answered this poll"); 
       } 
      } else { 
       message.setAnswered(true); 
       message.setAnswer("" + 1); 
       if ((message.getScope().equals("private") && message.getResponseCount() > 0) || message.getScope().equals("domain")) { 
        message.setOption2Count(message.getOption2Count() + 1); 
        message.setResponseCount(message.getResponseCount() + 1); 
       } 
       activity.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         UpdateMessageTask updateMessageTask = new UpdateMessageTask(message); 
         updateMessageTask.execute(); 
        } 
       }); 

       PollReply pollReply = new PollReply(message); 
       pollReply.execute(); 
      } 

     } 
    }); 

    pollChoice3.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (message.getAnswered()) { 
       if (message.getScope().equals("private") && (message.getResponseCount() < 1) && message.getVisibility().equals("public")) { 
        showAlert("Not enough people have responded to display answers"); 
       } else { 
        showAlert("You have already answered this poll"); 
       } 
      } else { 
       message.setAnswered(true); 
       message.setAnswer("" + 2); 
       if ((message.getScope().equals("private") && message.getResponseCount() > 0) || message.getScope().equals("domain")) { 
        message.setOption3Count(message.getOption3Count() + 1); 
        message.setResponseCount(message.getResponseCount() + 1); 
       } 
       activity.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         UpdateMessageTask updateMessageTask = new UpdateMessageTask(message); 
         updateMessageTask.execute(); 
        } 
       }); 

       PollReply pollReply = new PollReply(message); 
       pollReply.execute(); 
      } 

     } 
    }); 

    pollChoice4.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (message.getAnswered()) { 
       if (message.getScope().equals("private") && (message.getResponseCount() < 1) && message.getVisibility().equals("public")) { 
        showAlert("Not enough people have responded to display answers"); 
       } else { 
        showAlert("You have already answered this poll"); 
       } 
      } else { 
       message.setAnswered(true); 
       message.setAnswer("" + 3); 
       if ((message.getScope().equals("private") && message.getResponseCount() > 0) || message.getScope().equals("domain")) { 
        message.setOption4Count(message.getOption4Count() + 1); 
        message.setResponseCount(message.getResponseCount() + 1); 
       } 
       activity.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         UpdateMessageTask updateMessageTask = new UpdateMessageTask(message); 
         updateMessageTask.execute(); 
        } 
       }); 

       PollReply pollReply = new PollReply(message); 
       pollReply.execute(); 

      } 

     } 
    }); 

    pollChoice5.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (message.getAnswered()) { 
       if (message.getScope().equals("private") && (message.getResponseCount() < 1) && message.getVisibility().equals("public")) { 
        showAlert("Not enough people have responded to display answers"); 
       } else { 
        showAlert("You have already answered this poll"); 
       } 
      } else { 
       message.setAnswered(true); 
       message.setAnswer("" + 4); 
       if ((message.getScope().equals("private") && message.getResponseCount() > 0) || message.getScope().equals("domain")) { 
        message.setOption5Count(message.getOption5Count() + 1); 
        message.setResponseCount(message.getResponseCount() + 1); 
       } 
       activity.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         UpdateMessageTask updateMessageTask = new UpdateMessageTask(message); 
         updateMessageTask.execute(); 
        } 
       }); 

       PollReply pollReply = new PollReply(message); 
       pollReply.execute(); 
      } 

     } 
    }); 

    starWhite1.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!message.getAnswered()) { 
       message.setAnswered(true); 
       message.setAnswer("" + 1); 
       if ((message.getScope().equals("private") && message.getResponseCount() > 0) || message.getScope().equals("domain")) { 
        message.setOption1Count(message.getOption1Count() + 1); 
        message.setResponseCount(message.getResponseCount() + 1); 
       } 
       activity.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         UpdateMessageTask updateMessageTask = new UpdateMessageTask(message); 
         updateMessageTask.execute(); 
        } 
       }); 

       PollReply pollReply = new PollReply(message); 
       pollReply.execute(); 

      } else { 
       if (message.getScope().equals("private") && (message.getResponseCount() < 1) && message.getVisibility().equals("public")) { 
        showAlert("Not enough people have responded to display answers"); 
       } else { 
        showAlert("You have already answered this poll"); 
       } 
      } 

     } 
    }); 

    starWhite2.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!message.getAnswered()) { 
       message.setAnswered(true); 
       message.setAnswer("" + 2); 

       if ((message.getScope().equals("private") && message.getResponseCount() > 0) || message.getScope().equals("domain")) { 
        message.setOption2Count(message.getOption2Count() + 1); 
        message.setResponseCount(message.getResponseCount() + 1); 
       } 
       activity.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         UpdateMessageTask updateMessageTask = new UpdateMessageTask(message); 
         updateMessageTask.execute(); 
        } 
       }); 

       PollReply pollReply = new PollReply(message); 
       pollReply.execute(); 

      } else { 
       if (message.getScope().equals("private") && (message.getResponseCount() < 1) && message.getVisibility().equals("public")) { 
        showAlert("Not enough people have responded to display answers"); 
       } else { 
        showAlert("You have already answered this poll"); 
       } 
      } 

     } 
    }); 

的代码这是ListView的使用:

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:divider="@android:color/transparent" 
    android:scrollbarSize="3dp" 
    android:scrollbarStyle="outsideOverlay" 
    android:scrollingCache="true" 
    android:focusable="false" 
    android:focusableInTouchMode="false"/> 
+0

你可以请张贴一些代码?也检查出:http://stackoverflow.com/questions/6703390/listview-setonitemclicklistener-not-working-by-adding-button –

+0

在这里发布您的代码 –

+0

任何代码?在您的ListView适配器内部注册onClick。 –

回答

0

尝试

android:focusable="false" 

增加的XML ListViewItems

edit:e xample ListViewItem的XML机智按钮

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tree_item_container" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_centerVertical="true" 
android:background="@drawable/transparent_withline" 
android:gravity="left|center_vertical" 
android:orientation="horizontal" 
android:focusable="false"> 

<ImageView 
     android:id="@+id/tree_item_toggle" 
     android:layout_width="24dip" 
     android:layout_height="24dip" 
     android:focusableInTouchMode="false" 
     android:src="@drawable/closed"/> 

<ImageView 
    android:id="@+id/tree_item_status" 
    android:layout_width="24dip" 
    android:layout_height="24dip" 
    android:layout_gravity="center_vertical" 
    android:src="@drawable/icon12"/> 
<LinearLayout 
     android:id="@+id/tree_item_icocontainer" 
     android:layout_width="24dip" 
     android:layout_height="48dip" 
     android:orientation="vertical" > 

    <ImageView 
      android:id="@+id/tree_item_docs" 
      android:layout_width="24dip" 
      android:layout_height="24dip" 
      android:layout_gravity="center_vertical" 
      android:background="@drawable/has_docs" /> 
    <ImageView 
      android:id="@+id/tree_item_coord" 
      android:layout_width="24dip" 
      android:layout_height="24dip" 
      android:layout_gravity="center_vertical" 
      android:background="@drawable/has_location" /> 
</LinearLayout> 
<LinearLayout 
     android:id="@+id/tree_item_textcontainer" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_marginLeft="6dip" 
     android:layout_height="wrap_content"> 
    <Button 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New Button" 
      android:id="@+id/button" android:layout_gravity="right"/> 
</LinearLayout> 

+0

你能解释一下它对列表视图项目的作用吗?因为我想单击项目 – Jyothish

+0

如果将具有单独OnClickListener的任何项目添加到ListViewItem中,您遇到了问题,即使用Item上的第一次单击将焦点设置为ListVieItem,并且Click事件是handeld。它的nessecary设置focusable为false,如果你想第一次点击一个项目由一个子项目的Onclick监听器如Button或ImageView – 2red13

+0

然而,该项目将获得焦点,你将不会有任何问题与一般行为 – 2red13