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();
}
}