0

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_twofromの名前を変更して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>
4

1 に答える 1

0

問題を解決しました。フラグメントの 1 つにonResume()、listFragment を呼び出す関数があり、何らかの理由で問題が発生していました。

于 2013-11-01T09:46:32.463 に答える