2017-06-23 13 views
-3

私は、ボタンを使って情報を1つのフラグメントに入力し、その情報をアクティビティに戻し、取得した情報を表示する別のものにフラグメントを置き換えるアプリケーションを作っています最初の断片から。ただし、「com.example.cribbage2.CardKeyboardFragをcom.example.cribbage2.PCResultsFragにキャストできません」というエラーが表示され、その理由がわかりません。ここで"フラグメントに例外をキャストすることはできません

は、アクティビティの関連するコードです:

package com.example.cribbage2; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.os.Bundle; 

import java.util.Arrays; 

public class PointCalculator extends FragmentActivity implements CardKeyboardFrag.InfoTransfer { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_point_calculator); 

    //set cardKeyboardFrag 
    CardKeyboardFrag cardFrag = new CardKeyboardFrag(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.add(R.id.fragment_container, cardFrag); 
    transaction.addToBackStack(null); 
    transaction.commit(); 

    //tell fragment how many cards you are requesting 
} 

public void cardNumSet(int cardNumMin, int cardNumMax){ 
    CardKeyboardFrag cardKeyboardFrag = (CardKeyboardFrag) getSupportFragmentManager().findFragmentById(R.id.fragment_container); 
    cardKeyboardFrag.cardNumGet(cardNumMin, cardNumMax); 
} 

public void displayResults(int[] resultsIntArray){ 

    //parse intArray into String 
    String[] resultsStringArray = new String[4]; 
    int loop = 0; 
    for (int num: resultsIntArray){ 
     resultsStringArray[loop] = Integer.toString(num); 
     loop++; 
    } 

    //transfer to new fragment 
    PCResultsFrag resultsFrag = new PCResultsFrag(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragment_container, resultsFrag); 
    transaction.addToBackStack(null); 
    transaction.commit(); 


    //this is the line where the error occurs 
    PCResultsFrag pcResultsFrag = (PCResultsFrag) getSupportFragmentManager().findFragmentById(R.id.fragment_container); 

    pcResultsFrag.getResultsArray(resultsStringArray); 
} 
+0

まあ、 ' R.id.fragment_container'はあなたが既に行ったように 'CardKeyboardFrag'を返します前の行 'CardKeyboardFrag cardKeyboardFrag =(CardKeyboardFrag)getSupportFragmentManager()。findFragmentById(R.id.fragment_container);'。しかしここでは互換性のない 'PCResultsFrag'にキャストしようとしています。 – QBrute

+0

だから解決策は何ですか? PCResultsFragをどのようにして容器に入れるのですか?または、コンテナからCardKeyboardFragを削除しますか? –

+0

@QBrute ^^^^^^^^ –

答えて

-1

あなたはfindFragmentByIdで参照しているリソースIDがフラグメントコンテナビュー、問題のないフラグメントのためです。その後、

transaction.replace(R.id.fragment_container, resultsFrag , "resultsFrag"); 

そして、このようなフラグメントのオブジェクトを取得::

PCResultsFrag pcResultsFrag = (PCResultsFrag) getSupportFragmentManager().findFragmentById(**R.id.fragment_container**); 

CardKeyboardFrag cardKeyboardFrag = (CardKeyboardFrag) getSupportFragmentManager().findFragmentById(**R.id.fragment_container**); 
+0

はい、それは私がやっていることではありませんか? –

+0

マニフェストで宣言されたこれらのフラグメントのインスタンスがありますか?その場合は、そこに宣言されているis属性を使用します。もし浅く作成されていれば、フラグメントマネージャーからフラグメントを取り出す別の方法が必要になるでしょう – airowe

0

このように取引をしようと

Fragment currentFragment = getSupportFragmentManager().findFragmentByTag("resultsFrag"); 

currentFragment.getResultsArray(resultsStringArray); 
+0

'' currentFragment'はフラグメントのオブジェクトであり、 'PCResultsFrag'ではなく、' .getResultsArray'を使用できません –

+0

あなたが言ったことを試みるたびに、 '.getResultsArray'が赤く変わります。 –

+0

私はそれを変更して動作しますが、今はオブジェクト参照がnullだと言います –

関連する問題