2013-03-22 57 views
0

我有一個奇怪的問題,我的程序,我無法解釋,我迄今還沒有能夠找到解決方案。我有一個簡單的活動,可以在片段之間切換,並通過應用程序的初始設置運行用戶。第一個片段只是頂部的文本視圖,底部有一個按鈕,onClickListener設置爲在父活動上調用方法,但是在測試中,當我單擊按鈕時,什麼都不會發生。它不會像普通按鈕那樣改變顏色,並且沒有點擊似乎被註冊。Android片段界面無響應

這裏是佈局的XML:

<?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="fill_parent" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:text="@string/setup_intro" /> 

<Button 
    android:id="@+id/next_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:clickable="true" 
    android:width="72dp" 
    android:text="@string/next_button" /> 

</RelativeLayout> 

這是片段代碼,我實現onClickListener

public class SetupFragmentInitialScreen extends SherlockFragment 
{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) 
    { 
     View parentView = null; 
     parentView = inflater.inflate(R.layout.setup_fragment_initial_screen, 
             container, 
             false); 

     Button nextButton = (Button)parentView.findViewById(R.id.next_button); 
     nextButton.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Log.v("ButtonPressed", "You Pressed the button!"); 
       ((InitialActivity)getActivity()).onInitialScreenNextPress(); 
      } 
     }); 

     return parentView; 
    } 
} 

最後,這是我爲我的活動代碼到目前爲止

public class InitialActivity extends SherlockFragmentActivity 
{ 
    private SetupFragmentInitialScreen initialScreen; 
    private SetupFragmentPreferenceOneScreen preferenceOneScreen; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {  
     super.onCreate(savedInstanceState); 

     initialScreen = new SetupFragmentInitialScreen(); 
     preferenceOneScreen = new SetupFragmentPreferenceOneScreen(); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = 
      fragmentManager.beginTransaction(); 

     fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, 
               android.R.anim.fade_out); 

     fragmentTransaction.replace(android.R.id.content, 
            initialScreen); 

     fragmentTransaction.commit(); 
    } 

    public void onInitialScreenNextPress() 
    { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = 
      fragmentManager.beginTransaction(); 

     fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, 
               android.R.anim.fade_out); 

     fragmentTransaction.replace(android.R.id.content, 
            preferenceOneScreen); 

     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
    } 
} 

到目前爲止,我的代碼似乎是正確的,但正如我所說,沒有任何反應當我嘗試按下按鈕時的界面。

編輯:我已經添加下面的代碼到我的活動,以檢查觸摸事件

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    super.onTouchEvent(event); 

    Log.v("Touch Detected", "You are touching the screen."); 

    return false; 
} 

它記錄的事件都在屏幕上,除了當我觸摸按鈕,這樣該活動接收觸摸事件,但UI本身不是。我也嘗試加載另一個有一對單選按鈕的界面,而且他們也沒有響應。有什麼我做錯了初始化片段?

回答

0

我想清楚它是什麼。無論出於何種原因,當將第一個片段加載到活動中時,程序並不喜歡我試圖淡入淡出動畫。我從onCreate()方法中刪除了該行,現在它工作正常。

0

不幸的是,您發佈的任何代碼似乎都沒有指出問題所在。

按鈕不需要onClick偵聽器,以便在按下時更改顏色,所以我不擔心該部分。更重要的是:

  • 是否有可能任何透明視圖位於按鈕頂部並採取點擊? DDMS有一個「用於UI Automator的轉儲視圖層次結構」按鈕,可以幫助您檢查這一點。
  • 您的活動是否會覆蓋dispatchTouchEvent(),onInterceptTouchEvent()或相關API,並且其中一個可能會阻止觸摸到達按鈕?
  • 如果您將自定義主題應用於按鈕,您是否具有單獨的按下狀態的視覺效果?
+0

不應該有任何透明的意見,佈局正是我上面發佈的,只有2個意見在相對佈局,我沒有任何特殊的膨脹,只是片段事務調用替換android.R.id 。內容。 同樣,沒有覆蓋,除了包括我提供了我所有的活動代碼,並沒有涉及自定義主題,一切都是股票。 – WingedRayeth 2013-03-23 06:04:19