2013-04-26 79 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" 
相關問題