【问题标题】:Starting new Activity from a Fragment with a button使用按钮从 Fragment 启动新 Activity
【发布时间】:2016-07-13 06:40:35
【问题描述】:

我是 Java 和 android 新手,但遇到了一些问题。

我正在使用导航抽屉活动,每个菜单项都链接到一个片段。从片段中,我尝试使用链接到更多活动的按钮设置另一个菜单。

这是我想要链接到更多活动的片段:

package com.notimportant


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

/**
 * A simple {@link Fragment} subclass.
 */
public class About extends Fragment {




    public About() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_about, container, false);
    }

    Button button = (Button) rootView.findViewById(R.id.buttonDevs);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getActivity(), DevsActivity.class);
            startActivity(intent);
        }
    });

}

我收到以下错误:

Error:(35, 30) error: <identifier> expected
Error:(35, 31) error: illegal start of type
Error:(35, 34) error: ')' expected
Error:(35, 39) error: ';' expected
Error:(35, 40) error: invalid method declaration; return type required
Error:(37, 28) error: ';' expected
Error:(37, 38) error: ';' expected
Error:(41, 6) error: illegal start of type

rootView 以红色突出显示“无法解析符号 rootView”

setOnClickListener 以红色突出显示“无法解析符号 setOnClickListener"

@Override 以红色突出显示...“此处不允许注释”

视图以红色突出显示“无法解析符号视图”

我的按钮 ID 是 buttonDevs。我想参加的活动叫DevsActivity

我做错了什么?

【问题讨论】:

    标签: java android button android-activity fragment


    【解决方案1】:

    您必须将Button 放入rootView

    改变这个

     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.fragment_about, container, false);
        }
    
        Button button = (Button) rootView.findViewById(R.id.buttonDevs);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getActivity(), DevsActivity.class);
                startActivity(intent);
            }
        });
    

    到这里

     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
    
          View rootView = inflater.inflate(R.layout.fragment_about, container, false);
    
         Button button = (Button) rootView.findViewById(R.id.buttonDevs);
         button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getActivity(), DevsActivity.class);
                startActivity(intent);
            }
        });
    
            return rootView;
        }
    

    【讨论】:

    • 如何为同一个 Activity 添加更多按钮,链接到不同的 Activity?
    • Button 相同,您已在xml 上创建它,然后在java 代码中创建IntentStartActivity,就像您在代码中创建的那样......
    【解决方案2】:
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment_about, container, false);
        Button button = (Button) view.findViewById(R.id.buttonDevs);
        button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getActivity(), DevsActivity.class);
            startActivity(intent);
        }
    });
        return view;
    }
    

    【讨论】:

      【解决方案3】:

      改变这个:

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                               Bundle savedInstanceState) {
          // Inflate the layout for this fragment
          return inflater.inflate(R.layout.fragment_about, container, false);
      }
      
      Button button = (Button) rootView.findViewById(R.id.buttonDevs);
      button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Intent intent = new Intent(getActivity(), DevsActivity.class);
              startActivity(intent);
          }
      });
      

      关于这个:

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                               Bundle savedInstanceState) {
          View rootView = inflater.inflate(R.layout.fragment_about, container, false);
      
          Button button = (Button) rootView.findViewById(R.id.buttonDevs);
          button.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Intent intent = new Intent(getActivity(), DevsActivity.class);
                  startActivity(intent);
              }
          });
      
          return rootView;
      }
      

      【讨论】:

        【解决方案4】:

        像这样把你的按钮放在onCreateView()里面 -

         @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                // Inflate the layout for this fragment
                View view = inflater.inflate(R.layout.fragment_about, container, false);
                Button button = (Button) view.findViewById(R.id.buttonDevs);
                button.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View view) {
                      Intent intent = new Intent(getActivity(), DevsActivity.class);
                      startActivity(intent);
                   }
                });
                return view;
            }
        

        【讨论】:

          【解决方案5】:

          您的代码必须在onViewCreated() 方法内,因为您无法与onCreateView() 方法中的视图交互

           @Override
              public void onViewCreated(View rootView, @Nullable Bundle savedInstanceState) {
          
          Button button = (Button) rootView.findViewById(R.id.buttonDevs);
          button.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Intent intent = new Intent(getActivity(), DevsActivity.class);
                  startActivity(intent);
              }
          });
          }
          

          祝你好运

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-05
            • 2016-12-19
            • 2015-08-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多