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には、これを確認するのに役立つ「UIAutomatorのダンプビュー階層」ボタンがあります。
  • あなたのアクティビティはdispatchTouchEvent()、onInterceptTouchEvent()、または関連するAPIをオーバーライドしますか?これらのいずれかがタッチがボタンに到達するのを妨げている可能性がありますか?
  • ボタンにカスタムテーマを適用する場合、押された状態に対して個別のビジュアルがありますか?
于 2013-03-22T23:37:57.583 に答える
0

私はそれが何であるかを理解しました。なんらかの理由で、プログラムは、最初のフラグメントをアクティビティにロードするときに、アニメーションでフェードアウトフェードアウトを実行しようとするのを好まなかった。その行をonCreate()メソッドから削除しましたが、正常に機能するようになりました。

于 2013-03-25T14:44:42.700 に答える