2013-03-22 2 views
0

У меня возникла странная проблема с моей программой, которую я не могу объяснить, и до сих пор мне не удалось найти решение. У меня есть простая деятельность, которая будет переключаться между фрагментами и запускать пользователя через первоначальную настройку приложения. Первый фрагмент - это просто текстовый вид вверху, с кнопкой внизу, с установкой onClickListener для вызова метода родительской активности, однако при тестировании, когда я нажимаю на кнопку, ничего не происходит. Он не меняет цвет, как обычная кнопка, и ни один щелчок не будет зарегистрирован.Android Fragment Interface Unresponsive

Вот 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(); 
    } 
} 

Пока код мне кажется правильным, но, как я уже сказал, реакции нет интерфейс, когда я пытаюсь нажать кнопку.

Edit: я добавил следующий код в моей деятельности, чтобы проверить на события прикосновения

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

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

    return false; 
} 

Он регистрирует события по всему экрану, когда я коснувшись кнопки, за исключением, поэтому активность получает но пользовательский интерфейс сам по себе не является. Я также попытался загрузить другой интерфейс, который имеет пару переключателей, и они тоже не реагировали. Есть ли что-то, что я делаю неправильно с инициализацией фрагментов?

ответ

0

Я понял, что это было. По какой-то причине программа не любила меня, пытаясь сделать постепенное исчезновение в анимации при загрузке первого фрагмента в активность. Я удалил эту строку из метода onCreate(), и теперь он отлично работает.

0

К сожалению, ни один из введенных вами кодов не указывает на то, в чем проблема.

Кнопка не нуждается в прослушивателе onClick, чтобы изменить цвет при нажатии, поэтому я не стал бы беспокоиться об этой части. Что еще более важно:

  • Возможно ли, что любой прозрачный вид лежит поверх кнопки и делает щелчок? DDMS имеет кнопку «Дамп-просмотр иерархии для пользовательского интерфейса», которая может помочь вам проверить это.
  • Выполняет ли ваша деятельность переопределение dispatchTouchEvent(), onInterceptTouchEvent() или связанных API, и может ли одна из них не допустить касания нажатием кнопки?
  • Если вы применяете пользовательскую тему к кнопке, у вас есть отдельные визуальные эффекты для нажатого состояния?
+0

Не должно быть никаких прозрачных представлений, макет - это то, что я разместил выше, только 2 представления в относительной компоновке, и я не раздуваю ничего особенным, просто вызов транзакции фрагмента заменяет android.R.id .content. Аналогичным образом, нет никаких переопределений, кроме включений. Я предоставил весь свой код активности, и нет специальной темы, связанной со всем, это все. – WingedRayeth