FragmentActivity
タブレットの が をロードする場所に問題がありますFragment
view
が、相互作用しない限り表示されません。そのため、関数内のメイン アクティビティを介してビューが読み込まれます。ログ cat がすべての情報を記録しているのを見ることができるため、読み込みonActivityResult()
内のすべてのコードは問題ありません。Fragment
しかし、何らかの理由でFragment
は表示されませんが、ボタン、つまり戻るボタンがある領域を押すと、 がFragment
表示されてから消えます (戻るボタンが必要なように呼び出された場合)。イベントの奇妙な点は、フラグメントを取り出してonActivityResult()
ボタンを押して呼び出すと、正常に動作するため、フラグメント内の xml の問題や Java の問題ではないことがわかります。私が思うのは、onActivityResult()
しかし、私が理解できないのは、このアプリケーションの開発を開始したとき、私が行った方法で実装したところ、うまく機能したという事実です。
関数のコードは、問題を引き起こしているこの関数内のフラグメントの下にあり、アプリ内の他のすべてのフラグメントは正常に機能しています。もう1つのことは、アプリケーション(この関数内のフラグメントを含む)が電話で正常に動作することです。これは、タブレットの問題であることも示しています(2.2.3を実行している2つの異なるタブレット、2.2.3を実行しているsamsung galaxyタブとnexus 7でもテストされています) 4.3 を実行しています)、誰かが私を助けることができれば、私はそれを大いに感謝します:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println("ACTIVITY RESULT");
System.out.println("REQUEST CODE >>>>> " + requestCode);
if (requestCode == webview) {
if (resultCode == RESULT_OK) {
System.out.println("RESULT WEBVIEW");
System.out.println(data.getStringExtra("URL"));
Bundle args = new Bundle();
args.putString("URL", data.getStringExtra("URL"));
args.putString("List Name", currentList);
args.putInt("List Position", pos);
Fragment newFrag = new URLFragment();
// newFrag.setArguments(args);
FragmentTransaction transaction = MainActivity.this
.getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.in_from_right,
R.anim.out_from_left);
System.out.println("FRAG CONTAINER >>>> "
+ findViewById(R.id.fragment_container));
System.out.println("ARTICLE FRAG >>>> "
+ findViewById(R.id.article_fragment));
if (MainActivity.this.findViewById(R.id.fragment_container) != null) {
transaction.add(R.id.fragment_container, newFrag,
"URL Fragment");
transaction.addToBackStack(null);
} else {
System.out.println("IS THIS TABLET?");
transaction.add(R.id.article_fragment, newFrag,
"URL Fragment");
}
transaction.commit();
}
if (resultCode == RESULT_CANCELED) {
// Write your code if there's no result
System.out.println("CANCELED WEBVIEW");
}
} else if (requestCode == camera) {
if (resultCode == RESULT_OK) {
System.out.println("RESULT CAMERA");
System.out.println(data.getData());
if (data.getData().toString().contains("picasa")) {
System.out.println("UNABLE TO LOAD IMAGE");
Toast.makeText(
getApplicationContext(),
"We are unable to load this image, please select a different one",
Toast.LENGTH_LONG).show();
} else {
if (getSupportFragmentManager().findFragmentByTag(
"Image Fragment") == null) {
GatherGalleryImages gatherImage = new GatherGalleryImages();
Uri selectedImageUri = data.getData();
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(selectedImageUri,
projection, null, null, null);
String selectedImagePath = gatherImage.getPath(cursor);
System.out.println(selectedImagePath);
Bundle args = new Bundle();
args.putString("List Name", currentList);
args.putInt("List Position", pos);
args.putString("Image Location", selectedImagePath);
CameraItemFragment newFragment = new CameraItemFragment();
newFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.setCustomAnimations(R.anim.in_from_right,
R.anim.out_from_left);
if (findViewById(R.id.fragment_container) != null) {
transaction.add(R.id.fragment_container,
newFragment, "Image Fragment");
transaction.addToBackStack(null);
transaction.commit();
} else {
transaction.add(R.id.article_fragment, newFragment,
"Image Fragment");
// transaction.addToBackStack(null);
transaction.commit();
}
}
}
}
if (resultCode == RESULT_CANCELED) {
// Write your code if there's no result
System.out.println("CANCELED CAMERA");
}
} else if (requestCode == IntentIntegrator.REQUEST_CODE) {
if (resultCode != RESULT_CANCELED) {
IntentResult scanResult = IntentIntegrator.parseActivityResult(
requestCode, resultCode, data);
if (scanResult != null) {
String upc = scanResult.getContents();
// put whatever you want to do with the code here
System.out.println("UPC >>>> " + upc);
Intent mainIntent = new Intent(MainActivity.this,
Webview_Activity.class);
mainIntent.putExtra("upc", upc);
mainIntent.putExtra("listName", currentList);
MainActivity.this.startActivityForResult(mainIntent, 1);
}
}
} else if (requestCode == cam) {
System.out.println("CAMERA INTENT 0");
if (resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
Uri tempUri = getImageUri(getApplicationContext(), photo);
// CALL THIS METHOD TO GET THE ACTUAL PATH
File finalFile = new File(getRealPathFromURI(tempUri));
String selectedImagePath = finalFile.getAbsolutePath();
Bundle args = new Bundle();
args.putString("List Name", currentList);
args.putInt("List Position", pos);
args.putString("Image Location", selectedImagePath);
CameraItemFragment newFragment = new CameraItemFragment();
newFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.setCustomAnimations(R.anim.in_from_right,
R.anim.out_from_left);
if (findViewById(R.id.fragment_container) != null) {
transaction.add(R.id.fragment_container, newFragment,
"Image Fragment");
transaction.addToBackStack(null);
transaction.commit();
} else {
transaction.add(R.id.article_fragment, newFragment,
"Image Fragment");
// transaction.addToBackStack(null);
transaction.commit();
}
}
if (resultCode == RESULT_CANCELED) {
// Write your code if there's no result
}
} else if (resultCode == RESULT_CANCELED) {
}
}
//編集
わかりましたので、少し発見しました。フラグメントは正常にロードされていますが、メインフラグメント (以下に示すように xml で設定されたもの) の背後にロードされていることがわかりましたが、onActivityResult()
関数から呼び出された場合のみです。関数は指してheadlines_fragment_two
いますが、それを指すとheadlines_fragment
フラグメントが前にロードされます。今、私はすでにheadlines_fragment_two
fromの名前を変更してactivity_fragment
、それが違いを生むかどうかを確認しました (残念ながら違いはありませんでした)。ですから、なぜこれが起こっているのか考えている人がいたら、助けてください。タブレットのフラグメント レイアウトの xml コードは次のとおりです。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal" >
<fragment
android:id="@+id/headlines_fragment"
android:name="com.package.name.MainFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.99" />
<RelativeLayout
android:id="@+id/divider"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.01"
android:background="#A6B5FAD9" />
<fragment
android:id="@+id/headlines_fragment_two"
android:name="com.package.name.ListFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>