【问题标题】:Android onClick method for TextSwticher用于 TextSwticher 的 Android onClick 方法
【发布时间】:2014-03-25 20:44:57
【问题描述】:

2有人可以帮助我使用 onClick 方法吗? 基本上我有一个每隔几秒就会改变一次的数组。目标是当“1”显示时,如果用户在屏幕上单击新活动,则在“2”显示时显示相同,如果用户在屏幕上单击不同的活动类显示。

     public TextSwitcher mSwitcher, mSwitcher1, mSwitcher2;


    String textToShow[] = {
            "1", "2"
    };


 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       View v = inflater.inflate(R.layout.example_layout, container, false);

        mSwitcher = (TextSwitcher) v.findViewById(R.id.textSwitcher);

        mSwitcher.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Intent n = null;
                switch (){
                case 0:
                    n = new Intent(getActivity(), FragMent1.class);
                    break;
                case 1:
                    n = new Intent(getActivity(), FragMent2.class);
                    break;
                }
                if(null!=n)
                    startActivity(n);
            }

                //Intent myIntent = new Intent(getActivity(), Listtube.class);
                //getActivity().startActivity(myIntent);        


        });

错误

03-23 21:10:09.216: W/dalvikvm(1876): threadid=1: thread exiting with uncaught exception (group=0xb1b11ba8)
03-23 21:10:09.236: E/AndroidRuntime(1876): FATAL EXCEPTION: main
03-23 21:10:09.236: E/AndroidRuntime(1876): Process: com.example.actionbartab, PID: 1876
03-23 21:10:09.236: E/AndroidRuntime(1876): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.actionbartab/com.example.actionbartab.FragMent1}: java.lang.ClassCastException: com.example.actionbartab.FragMent1 cannot be cast to android.app.Activity
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.os.Handler.dispatchMessage(Handler.java:102)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.os.Looper.loop(Looper.java:136)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.app.ActivityThread.main(ActivityThread.java:5017)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at java.lang.reflect.Method.invokeNative(Native Method)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at java.lang.reflect.Method.invoke(Method.java:515)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at dalvik.system.NativeStart.main(Native Method)
03-23 21:10:09.236: E/AndroidRuntime(1876): Caused by: java.lang.ClassCastException: com.example.actionbartab.FragMent1 cannot be cast to android.app.Activity
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
03-23 21:10:09.236: E/AndroidRuntime(1876):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
03-23 21:10:09.236: E/AndroidRuntime(1876):     ... 11 more

【问题讨论】:

  • 您目前遇到的实际问题是什么?
  • 我如何获取ViewbyID?如果用户点击屏幕,我已经设法打开新活动.. 但我的目标是当“1”显示并且如果用户点击它 fragment1.class 显示并且如果“2”显示并且如果用户点击它 fragment2.class 显示.缺少的项目是开关 (?) 以获取位置值。

标签: android android-activity onclicklistener


【解决方案1】:

您可以获取View 参数的id,然后在您的switch 中使用它。类似的东西

 public void onClick(View v) {
       Intent n = null;
       int id = v.getId();
       switch (id){
           case R.id.someId:
                n = new Intent(getActivity(), FragMent1.class);
                break;
           case R.id.someOtherId:
                n = new Intent(getActivity(), FragMent2.class);
                break;
        }

听起来这就是您要找的东西。如果没有,请更好地解释你想要什么。

编辑

我不确定我是否了解您的最新问题,但如果我了解了,那么您可以执行类似的操作

public void onClick(View v) {
       Intent n = null;
       int id = v.getId();
       switch (id){
           case R.id.someId:
           case R.id.someOtherId:
                n = new Intent(getActivity(), FragMent1.class);
                break;

【讨论】:

  • 是的,我正在寻找“int id = v.getId();”但由于某种原因,它没有改变为那个特定的活动。
  • 我将第一个案例设置为 R.id.textSwitcher 并遇到了一些错误。
  • 您正在尝试使用startActivity() 启动Fragment。您应该尝试启动 Activity ,其中包含 Fragment
  • 现在工作得很好,救星。但是,如果我想启动包含该片段的活动怎么办?
  • 我不明白。启动Activity
【解决方案2】:

Fragment 和 Activity 是不同的。
Activity.startActivity(Intent) 方法调用新的 Activity 但 FragMent1 不是 Activity。
所以你不能将 FragMent1 类转换为 Activity 类。
如果 FragMent1 继承 Fragment,则应使用 FragmentManager。

Fragment fragment = FragMent1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content, fragment);
ft.commit();

R.id.content 是布局之一的 id。


这只是简单的示例代码。你应该根据你的应用编写代码。

public void onClick(View v) {
    int id = v.getId();

    Fragment fragment = null;
    Bundle args = new Bundle();
    switch ( id ) {
    case R.id.fragment1:
        fragment = new FragMent1();
        args.putString("someKey1", "someValue1");
        fragment.setArguments(args);
        showFragment(fragment);
        break;
    case R.id.fragment2:
        fragment = new FragMent2();
        args.putString("someKey2", "someValue2");
        fragment.setArguments(args);
        showFragment(fragment);
        break;
    default:
        break;
    }
}

public void showFragment(Fragment fragment) {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.content, fragment);
    ft.commit();
}

【讨论】:

  • 很好,但它如何动态工作?我将有 20 个字符串数组。希望它在 20 个片段之间切换。
  • 通过用户一些动作,如果Fragment变成其他Fragment,你调用上面的代码。只要你选择你想要的片段。另外,如果您想向 Fragment 发送数据,请调用 Fragment.setArguments(Bundle)。
  • 感谢您的帮助,但基本上我的新活动是“公共类 Listtube 扩展 YouTubeFailureRecoveryActivity implementsView.OnClickListener,AdapterView.OnItemClickListener”,这不是一个片段。我试图将其转换为片段,但不能。
  • 对不起,我认为 FragMent1 是 Fragment 类。如果 FragMent1(Listtube) 是 Activity,请使用上面的 codeMagic 代码。如需详细答案,我们需要更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
相关资源
最近更新 更多