2013-04-26 96 views
4

我第一次使用它时没有生成单击事件的按钮出现问题,但是如果我单击屏幕上的按钮以外的其他按钮,然后单击它。它直接工作!为什么我的按钮在第一次点击时不起作用?

在我的片段onCreateView我:

viewAnimator = (ViewAnimator) inflater.inflate(R.layout.fragment_login_supplier, container, false); 
    initView(viewAnimator); 

和initView:

private void initView(ViewAnimator ll) { 
...... 

    errorButton = (Button) errorLayout.findViewById(R.id.buttonError); 
    errorButton.setBackgroundResource(btnErrorSelector); 
    errorButton.setOnClickListener(FragmentLoginSupplier.this); 
..... 

}

我的片段实现OnClickListener但我:@覆盖公共无效的onClick(查看VUE) {} 第一次没有收到任何东西...

按钮ID:buttonError

布局这里开始:

<ScrollView 
    android:id="@+id/scrollViewForm" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top" > 

    <LinearLayout 
     android:id="@+id/login_form_container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <RelativeLayout 
      android:id="@+id/RelativeLayoutErrorMessage" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/button_height" 
      android:background="@color/DarkGray" 
      android:visibility="gone" > 

      <ImageView 
       android:id="@+id/ImageViewErrorMessage" 
       android:layout_width="15dp" 
       android:layout_height="15dp" 
       android:layout_alignParentLeft="true" 
       android:layout_centerVertical="true" 
       android:layout_marginLeft="10dp" 
       android:contentDescription="@string/todo" 
       android:src="@drawable/alert_white" 
       android:visibility="gone" /> 

      <TextView 
       android:id="@+id/textViewErrorMessage" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerVertical="true" 
       android:layout_marginLeft="5dp" 
       android:layout_toLeftOf="@+id/buttonError" 
       android:layout_toRightOf="@+id/ImageViewErrorMessage" 
       android:text="@string/vous_n_avez_pas_encore_ajout_de_compte" 
       android:textColor="@color/white" /> 

      <Button 
       android:id="@+id/buttonError" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:layout_alignParentRight="true" 
       android:layout_margin="5dp" 
       android:background="@drawable/button_suppression_noir_selector" /> 
     </RelativeLayout> 

     <View 
      android:id="@+id/RelativeLayoutErrorMessageBottomBorder" 
      android:layout_width="wrap_content" 
      android:layout_height="1dp" 
      android:background="#FFFFFFFF" 
      android:visibility="gone" /> 
+2

让我们来看看实际的代码,而不是只是你的布局。我相信你将onClickListener设置到了onCreate以外的其他位置。 – FWeigl 2013-04-26 09:54:40

+0

你为什么用这个..? 'android:layout_height =“match_parent”'我们可以看到这个xml的快照。? – SilentKiller 2013-04-26 09:55:40

+1

你的活动代码在哪里? – 2013-04-26 10:23:54

回答

11

我不知道这是否能解决你的问题,但即使我有一个按钮点击的问题。此代码为我工作。我认为,在第一种情况下,第一次点击只需要重点。第二次点击是“真实”点击。

<style name="ButtonStyle" parent="@android:style/Widget.Holo.Button"> 
    <item name="android:focusable">true</item> 
    <item name="android:focusableInTouchMode">true</item> 
    <item name="android:clickable">true</item> 
    <item name="android:background">@drawable/custom_button</item> 
    <item name="android:textColor">@color/somecolor</item> 
    <item name="android:gravity">center</item> 
</style> 

请试试看,让我知道。

你可以尝试把其他的解决办法是在abc.java

input.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        v.performClick(); 
       } 
      } 
     }); 

增加,并在你的XML <item name="android:focusableInTouchMode">true</item>

请让我知道,如果它的工作

+0

你能解释为什么按钮点击第一次焦点,然后从第二次以后它真的被点击了吗?按钮通常不会这样,但为什么会发生这种情况? – 2017-10-20 10:18:52

2

你可能有一个验证事件处理程序的地方,第一次运行时。查看标签序列中最后一个控件的验证。你可能会在那找到一些东西

5

只需设置errorButton:

errorButton.setFocusableInTouchMode(false); 

或添加

errorButton.setOnTouchListener(new OnTouchListener(){ 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     if (MotionEvent.ACTION_UP == event.getAction()) 
     { 
      view.performClick(); 
      return true; 
     } 
    return false; 
    } 
}); 
+0

'setFocusabeInTouchMode(false)'在这种情况下没有效果。 – 2015-06-11 17:27:54

2

我解决了这个通过简单的设置:

<ImageButton 
    android:id="@+id/imageButtonFiltroNome" 
    ... 
    android:clickable="true" 
    android:focusable="false" 
    android:focusableInTouchMode="false" /> 
+0

Nah,没有任何效果。 – 2015-06-11 17:31:54

0

我面临同样的问题,让我告诉你我是如何修复它的。 我在表单中有xml。

<RelativeLayout 
    android:id="@+id/rlContactUs" 
    style="@style/SettingsItemContainer" > 
    <com.CustomTextView 
     android:id="@+id/tvContactUs" 
     style="@style/SettingsItem" 
     android:text="@string/contactUs"/> 
</RelativeLayout> 

SettingsItemContainer的风格如下。

<style name="SettingsItemContainer"> 
other things 
    <item name="android:clickable">true</item> 
    <item name="android:focusable">true</item> 
    <item name="android:focusableInTouchMode">true</item> 
</style> 

现在,即使在触摸时,相对布局也没有收到第一次点击。所以,我把它改为:

<style name="SettingsItemContainer"> 
other things 
    <item name="android:clickable">true</item> 
    <item name="android:focusable">true</item> 
    <item name="android:focusableInTouchMode">false</item> 
</style> 

这解决了这个问题

1

如果你的控制是一个滚动的容器内,设置此容器上:

android:descendantFocusability="afterDescendants" 
相关问题