私は自分のプログラムに説明できない奇妙な問題を抱えており、これまでのところ解決策を見つけることができませんでした。フラグメントを切り替えて、アプリの初期設定をユーザーに実行する簡単なアクティビティがあります。最初のフラグメントは上部にテキストビューがあり、下部にボタンがあり、親アクティビティのメソッドを呼び出すように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自体は受信しません。また、ラジオボタンのペアを持つ別のインターフェイスをロードしようとしましたが、それらも応答しませんでした。フラグメントの初期化で間違っていることがありますか?