1

アクティビティからそのアクティビティ内にあるフラグメントに文字列を送信するカスタム リスナーを設定しようとしています。アクティビティのボタンが押され、テキストの文字列がフラグメントに送信され、そのフラグメントのテキストビューに表示されるはずですが、classCastException が発生し、これについてどうすればよいかわかりません。これをどのように機能させますか?

エラーはこの行にあります

 listener = (OnStringRequestedListener) fragment;

そのコード行がないと、このカスタム リスナー インターフェイスを設定する方法がわかりません。反対方向に進むために同様のコード行を使用しましたが、うまくいきました。またはフラグメントからアクティビティにメッセージを送信していました。しかし、私が今日試みていることは機能していません

スタックトレース

Caused by: java.lang.ClassCastException:
com.example.asynctaskprogressbarexample.InterfaceActivityToFragmentFragment
cannot be cast to com.example.asynctaskprogressbarexample
.InterfaceActivityToFragment$OnStringRequestedListener
at com.example.asynctaskprogressbarexample
.InterfaceActivityToFragment.onCreate(InterfaceActivityToFragment.java:27)

活動クラス

  public class InterfaceActivityToFragment extends Activity {

Button buttonOne;
private OnStringRequestedListener listener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.interface_activity_to_fragment);

    Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment1);

    listener = (OnStringRequestedListener) fragment; // <-- ERROR ON THIS LINE

     if (fragment instanceof OnStringRequestedListener) {
          listener = (OnStringRequestedListener) fragment;
        } else {
          throw new ClassCastException(fragment.toString()
              + " must implemenet OnTimeRequestedListener");
        }

    buttonOne = (Button) findViewById(R.id.button1);

    buttonOne.setOnClickListener(new Button.OnClickListener(){

           @Override
           public void onClick(View v) {
            // TODO Auto-generated method stub
              listener.passString("string from Activity");

           }

        });

}

public interface OnStringRequestedListener {
    public void passString(String sendNumberString);

  }

 }

フラグメントクラス

 public class InterfaceActivityToFragmentFragment extends Fragment implements FragmentHeadlessAsyncTaskFragment.OnStringRequestedListener {

TextView textViewOne;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    View view = inflater.inflate(R.layout.interface_activity_to_fragment_fragment, container, false);

    TextView textViewOne = (TextView) view.findViewById(R.id.textView1);

    return view;
} // end on create view

@Override
 public void onActivityCreated(Bundle savedInstanceState) {
  super.onActivityCreated(savedInstanceState);

  setRetainInstance(true);
 }

@Override
public void passString(String stringFromActivity) {
     textViewOne.setText(stringFromActivity);

}
  }
4

1 に答える 1

3

実装していますがFragmentHeadlessAsyncTaskFragment.OnStringRequestedListener、にキャストしていInterfaceActivityToFragment.OnStringRequestedListenerます。

2 つの異なるクラスに入れ子として定義された同じインターフェイス。

于 2013-07-21T07:58:43.410 に答える