0

我的程序有一个奇怪的问题,我无法解释,到目前为止我还没有找到解决方案。我有一个简单的活动,它将在片段之间切换并通过应用程序的初始设置运行用户。第一个片段只是顶部的文本视图,底部有一个按钮,onClickListener 设置为调用父活动上的方法,但是在测试中,当我单击按钮时,没有任何反应。它不会像普通按钮那样改变颜色,并且似乎没有点击注册。

这是布局的 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 本身不是。我还尝试加载另一个具有一对单选按钮的界面,但它们也没有响应。初始化片段时我做错了什么吗?

4

2 回答 2

0

不幸的是,您发布的代码似乎都没有指出问题所在。

按钮不需要 onClick 侦听器即可在按下时更改颜色,所以我不会担心那部分。更重要的是:

  • 是否有可能任何透明视图位于按钮顶部并单击?DDMS 有一个“Dump View Hierarchy for UI Automator”按钮,可以帮助您检查这一点。
  • 您的活动是否覆盖了 dispatchTouchEvent()、onInterceptTouchEvent() 或相关 API,其中之一是否会阻止触摸到达按钮?
  • 如果您将自定义主题应用于按钮,您是否有单独的按下状态的视觉效果?
于 2013-03-22T23:37:57.583 回答
0

我弄清楚那是什么。无论出于何种原因,程序不喜欢我在将第一个片段加载到活动中时尝试在动画中进行淡出淡入淡出。我从 onCreate() 方法中删除了该行,现在它工作正常。

于 2013-03-25T14:44:42.700 回答