Java 如果我试图打开活动中的片段,应用程序将崩溃

Java 如果我试图打开活动中的片段,应用程序将崩溃,java,android,android-fragments,Java,Android,Android Fragments,每次我试图在我的MainActivity.class中打开我的片段时,我的应用程序都会崩溃 MainActivity.class /* Menu */ @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected

每次我试图在我的
MainActivity.class
中打开我的
片段时,我的应用程序都会崩溃

MainActivity.class

/* Menu */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.add_server:
            Intent intent = new Intent(getApplicationContext(), AddServerFragment.class);
            startActivity(intent);
            return true;
        case R.id.menu_refresh:
            myWebView.reload();
            return true;
        default:
            return true;
    }        
...
 public class AddServerFragment extends Fragment {

    public AddServerFragment(){

    }

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

        Button btn_back, btn_add;
        final EditText server_ip, server_name;

        server_ip = (EditText) findViewById(R.id.edit_server_address);
        server_name = (EditText) findViewById(R.id.edit_server_name);

         /* Back Button */
        btn_back = (Button) findViewById(R.id.btn_back);
        btn_back.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent);
            }
        });

        /* Add IP Button */
        btn_add = (Button) findViewById(R.id.btn_add);
        btn_add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                String new_server_ip = null, new_server_name = null;

                ArrayList<String> server_name_list = new ArrayList<String>();
                ArrayList<String> server_ip_list = new ArrayList<String>();

                new_server_ip = server_ip.getText().toString();
                server_ip_list.add(new_server_ip);

                new_server_name = server_name.getText().toString();
                server_name_list.add(new_server_name);
            }
        });

        return rootView;
    }
}
编辑

My Manifest.xml

<?xml version="1.0" encoding="utf-8"?>



您需要将活动声明添加到清单文件中:

<activity android:name=".MainActivity" >
</activity>

错误Intent Intent=new Intent(getApplicationContext(),AddServerFragment.class); 星触觉(意向)

AddServerFragment不是活动片段。

对于fragment to add-in活动,您必须使用以下方法:

在您的活动中

activity_main.XML中的XML代码部分:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/fragment_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

当需要打开片段时,不能使用intent。 你可以试试

例如:

public void getFragment(Fragment fragment) {
    FragmentManager fm = getSupportFragmentManager();
    Fragment mFragment = fm.findFragmentById(R.id.fragment_container);

    if (mFragment == null) {
        mFragment = fragment;
        fm.beginTransaction()
                .add(R.id.fragment_container, mFragment)
                .commit();
    }
    if (mFragment != null) {
        mFragment = fragment;
        fm.beginTransaction().addToBackStack(null)
                .replace(R.id.fragment_container, mFragment)
                .commit();
    }
}

您正在膨胀片段,因此必须使用
rootView
获取所有视图。例如
rootView.findviewbyd(R.id.edit\u server\u地址)如果日志显示这可能是因为您忘记在清单中声明您的活动。感谢您的回复,我必须在哪里添加它?你的意思是我必须在'rootView.findViewById(R.id…);还有一件事,当我在Android中使用片段时,我在onActivityCreated()方法中初始化我的控件(按钮、edittext等),之前添加了它。很抱歉昨天没有回复,我需要20个代表点来聊天…谢谢,但我真的不知道在哪里添加这个,你能邀请我聊天吗?请稍等,我会试试,@sour91,现在我更新了一些代码,请检查并告诉我,你面临的问题是什么,所以我在我的
super.onCreate(savedInstanceState)下添加了;         setContentView(R.layout.activity_main)但我得到一个错误:
错误:(96,25)错误:找不到适合add(int,MainActivity.AddServerFragment)方法FragmentTransaction的方法。add(Fragment,String)不适用(参数不匹配;int无法转换为Fragment)方法FragmentTransaction。add(int,Fragment)不适用(参数不匹配;MainActivity.AddServerFragment无法转换为Fragment)
还可以在活动xml中的Fragment\u容器中添加xml代码,
Wrong with the above code:
    Use the correct method for using fragment, you have used method for starting activity.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/fragment_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />
    if (findViewById(R.id.fragment_container) != null) {

        if (savedInstanceState != null) {
            return;
        }

        // Create an instance of AddServerFragment
        AddServerFragment firstFragment = new AddServerFragment();
        // if there are any extras
        firstFragment.setArguments(getIntent().getExtras());

        // Add the fragment to the 'fragment_container' FrameLayout
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment).commit();
    }
public void getFragment(Fragment fragment) {
    FragmentManager fm = getSupportFragmentManager();
    Fragment mFragment = fm.findFragmentById(R.id.fragment_container);

    if (mFragment == null) {
        mFragment = fragment;
        fm.beginTransaction()
                .add(R.id.fragment_container, mFragment)
                .commit();
    }
    if (mFragment != null) {
        mFragment = fragment;
        fm.beginTransaction().addToBackStack(null)
                .replace(R.id.fragment_container, mFragment)
                .commit();
    }
}