Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中的简单交互通信_Java_Android_Android Fragments - Fatal编程技术网

Java android中的简单交互通信

Java android中的简单交互通信,java,android,android-fragments,Java,Android,Android Fragments,我试图对一个片段执行onclick活动,该片段反映在同一活动中另一个片段的textview中 MainActivity.java public class MainActivity extends FragmentActivity implements Communicator{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS

我试图对一个片段执行onclick活动,该片段反映在同一活动中另一个片段的textview中

MainActivity.java

public class MainActivity extends FragmentActivity implements Communicator{

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

    @Override
    public void respond(String data) {
        // TODO Auto-generated method stub

        FragmentManager FM=getSupportFragmentManager();
        Fragment2 f2=(Fragment2) FM.findFragmentById(R.id.fragment2);
        f2.changeText(data);

    }


}
public class Fragment1 extends Fragment implements OnClickListener{

    Button btn;
    Communicator comm;
    int counter=0;

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

        View view=inflater.inflate(R.layout.fragment1, container, false);
        return view;
    }

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

        // Point interface to main activity
        comm=(Communicator) getActivity();
        btn=(Button) getActivity().findViewById(R.id.button1_id);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        counter++;
        comm.respond("Button is clicked"+counter+"times");
    }

}
public class Fragment2 extends Fragment{

    TextView TV;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view=inflater.inflate(R.layout.fragment2, container,false);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        TV=(TextView) getActivity().findViewById(R.id.textView1_id);
    }


    public void changeText(String data) {
        // TODO Auto-generated method stub
        TV.setText(data);
    }

}
public interface Communicator {

    void respond(String data);
}
Fragment1.java

public class MainActivity extends FragmentActivity implements Communicator{

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

    @Override
    public void respond(String data) {
        // TODO Auto-generated method stub

        FragmentManager FM=getSupportFragmentManager();
        Fragment2 f2=(Fragment2) FM.findFragmentById(R.id.fragment2);
        f2.changeText(data);

    }


}
public class Fragment1 extends Fragment implements OnClickListener{

    Button btn;
    Communicator comm;
    int counter=0;

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

        View view=inflater.inflate(R.layout.fragment1, container, false);
        return view;
    }

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

        // Point interface to main activity
        comm=(Communicator) getActivity();
        btn=(Button) getActivity().findViewById(R.id.button1_id);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        counter++;
        comm.respond("Button is clicked"+counter+"times");
    }

}
public class Fragment2 extends Fragment{

    TextView TV;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view=inflater.inflate(R.layout.fragment2, container,false);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        TV=(TextView) getActivity().findViewById(R.id.textView1_id);
    }


    public void changeText(String data) {
        // TODO Auto-generated method stub
        TV.setText(data);
    }

}
public interface Communicator {

    void respond(String data);
}
Fragment2.java

public class MainActivity extends FragmentActivity implements Communicator{

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

    @Override
    public void respond(String data) {
        // TODO Auto-generated method stub

        FragmentManager FM=getSupportFragmentManager();
        Fragment2 f2=(Fragment2) FM.findFragmentById(R.id.fragment2);
        f2.changeText(data);

    }


}
public class Fragment1 extends Fragment implements OnClickListener{

    Button btn;
    Communicator comm;
    int counter=0;

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

        View view=inflater.inflate(R.layout.fragment1, container, false);
        return view;
    }

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

        // Point interface to main activity
        comm=(Communicator) getActivity();
        btn=(Button) getActivity().findViewById(R.id.button1_id);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        counter++;
        comm.respond("Button is clicked"+counter+"times");
    }

}
public class Fragment2 extends Fragment{

    TextView TV;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view=inflater.inflate(R.layout.fragment2, container,false);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        TV=(TextView) getActivity().findViewById(R.id.textView1_id);
    }


    public void changeText(String data) {
        // TODO Auto-generated method stub
        TV.setText(data);
    }

}
public interface Communicator {

    void respond(String data);
}
Communicator.java

public class MainActivity extends FragmentActivity implements Communicator{

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

    @Override
    public void respond(String data) {
        // TODO Auto-generated method stub

        FragmentManager FM=getSupportFragmentManager();
        Fragment2 f2=(Fragment2) FM.findFragmentById(R.id.fragment2);
        f2.changeText(data);

    }


}
public class Fragment1 extends Fragment implements OnClickListener{

    Button btn;
    Communicator comm;
    int counter=0;

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

        View view=inflater.inflate(R.layout.fragment1, container, false);
        return view;
    }

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

        // Point interface to main activity
        comm=(Communicator) getActivity();
        btn=(Button) getActivity().findViewById(R.id.button1_id);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        counter++;
        comm.respond("Button is clicked"+counter+"times");
    }

}
public class Fragment2 extends Fragment{

    TextView TV;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view=inflater.inflate(R.layout.fragment2, container,false);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        TV=(TextView) getActivity().findViewById(R.id.textView1_id);
    }


    public void changeText(String data) {
        // TODO Auto-generated method stub
        TV.setText(data);
    }

}
public interface Communicator {

    void respond(String data);
}
日志

12-25 18:33:07.961: E/AndroidRuntime(454): Uncaught handler: thread main exiting due to uncaught exception
12-25 18:33:07.996: E/AndroidRuntime(454): java.lang.ClassCastException: com.example.simplestdynamicfragment2.Fragment1
12-25 18:33:07.996: E/AndroidRuntime(454):  at com.example.simplestdynamicfragment2.MainActivity.respond(MainActivity.java:22)
12-25 18:33:07.996: E/AndroidRuntime(454):  at com.example.simplestdynamicfragment2.Fragment1.onClick(Fragment1.java:43)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.View.performClick(View.java:2364)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.View.onTouchEvent(View.java:4179)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.widget.TextView.onTouchEvent(TextView.java:6541)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.View.dispatchTouchEvent(View.java:3709)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-25 18:33:07.996: E/AndroidRuntime(454):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
12-25 18:33:07.996: E/AndroidRuntime(454):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
12-25 18:33:07.996: E/AndroidRuntime(454):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.os.Looper.loop(Looper.java:123)
12-25 18:33:07.996: E/AndroidRuntime(454):  at android.app.ActivityThread.main(ActivityThread.java:4363)
12-25 18:33:07.996: E/AndroidRuntime(454):  at java.lang.reflect.Method.invokeNative(Native Method)
12-25 18:33:07.996: E/AndroidRuntime(454):  at java.lang.reflect.Method.invoke(Method.java:521)
12-25 18:33:07.996: E/AndroidRuntime(454):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-25 18:33:07.996: E/AndroidRuntime(454):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-25 18:33:07.996: E/AndroidRuntime(454):  at dalvik.system.NativeStart.main(Native Method)

我有一点不同的方法。您可以这样做:

OnClick()
{
  ((MainActivity)getActivity()).SOME_METHOD_NAME();
}
活动中
创建一个
公共方法

public void SOME_METHOD_NAME()
{
 //Write code to change text in second fragment
 FragmentManager FM=getSupportFragmentManager();
        Fragment2 f2=(Fragment2) FM.findFragmentById(R.id.fragment2);
        f2.changeText(data);
}
现在在您的第一个
片段中
调用此
方法
,如下所示:

OnClick()
{
  ((MainActivity)getActivity()).SOME_METHOD_NAME();
}
在第二个
片段中
代码应与您的代码相同:

 public void changeText(String data) {
        // TODO Auto-generated method stub
        TV.setText(data);
    }

我没有测试这段代码,因为我在这里直接编写了这段代码。但它应该能很好地工作。

主要活动中的第22行是什么?Fragment2F2=(Fragment2)FM.findFragmentById(R.id.Fragment2);你能检查Fragment2中Fragment类的导入吗,它是一个
android.app.Fragment
还是
android.support.v4.Fragment
。如果它是第一个,那么您不能将旧版本片段转换为新的类。我检查过了,它是android.support.v4.fragment