我个人在对于Fragment不熟悉的情况下,会认为使用普通的Activity方法跳转会更加容易得多,以为理解起来没那么困难。 而使用Fragment我会变得很迷茫,比如说,我没办法知道一个程序里我要使用两个界面,而我除去原生的布局之外,我要另外再建几个布局,是一个,还是两个,然后类我需不需要再另外新建,如果需要的话,我是要建一个还是两个?这些问题在初次使用Fragment时,反而远没有使用普通方法更为便捷,而在看了几位同学完成的作业后,我的问题总算得到了解决
这是新建的第一个关于Fragment的xml 这是新建的第二个关于Fragment的xml 这是原生的类中的代码 package com.example.kimdemon.fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.KeyEvent; import android.view.View; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ fragment1 Fragment1; fragment2 Fragment2; private boolean qiehuan = true; private boolean tuichu = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); Fragment1 = new fragment1(); transaction.add(R.id.yf_show,Fragment1); transaction.commit(); } @Override public void onClick(View view) { if(view.getId() == R.id.yf_btn1){ tuichu = true; if(qiehuan){ FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); if (Fragment2 == null){ Fragment2 = new fragment2(); transaction.replace(R.id.yf_show,Fragment2); transaction.commit(); qiehuan = false; } else{ transaction.replace(R.id.yf_show,Fragment2); transaction.commit(); qiehuan = false; } }else{ Toast.makeText(this,"This is second fragment",Toast.LENGTH_SHORT).show(); } } } public boolean onKeyDown(int keyCode, KeyEvent event) { if(event.getKeyCode()==KeyEvent.KEYCODE_BACK&&tuichu){ FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); qiehuan = true; tuichu = false; transaction.replace(R.id.yf_show,Fragment1); transaction.commit(); return false; } else { finish(); } return super.onKeyDown(keyCode, event); } } 其中有一个地方必须注意,如果关于这两个布局的类是由你自己手动新建的话,则必须写下如下的代码 package com.example.kimdemon.fragment; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class fragment1 extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragmengt1,container,false); return view; } } 运行结果如图 而至于新建布局的类会不会自动生成我就不太清楚了,反正我是没有生成,所以只能自己写了
package com.example.kimdemon.fragment;
import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.KeyEvent; import android.view.View; import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
fragment1 Fragment1; fragment2 Fragment2; private boolean qiehuan = true; private boolean tuichu = false;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction();
Fragment1 = new fragment1(); transaction.add(R.id.yf_show,Fragment1); transaction.commit();
}
@Override public void onClick(View view) { if(view.getId() == R.id.yf_btn1){ tuichu = true; if(qiehuan){ FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); if (Fragment2 == null){ Fragment2 = new fragment2(); transaction.replace(R.id.yf_show,Fragment2); transaction.commit(); qiehuan = false; } else{ transaction.replace(R.id.yf_show,Fragment2); transaction.commit(); qiehuan = false; } }else{ Toast.makeText(this,"This is second fragment",Toast.LENGTH_SHORT).show(); }
} } public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getKeyCode()==KeyEvent.KEYCODE_BACK&&tuichu){
FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); qiehuan = true; tuichu = false; transaction.replace(R.id.yf_show,Fragment1); transaction.commit(); return false; } else { finish(); } return super.onKeyDown(keyCode, event);
import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;
public class fragment1 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragmengt1,container,false); return view; }
而至于新建布局的类会不会自动生成我就不太清楚了,反正我是没有生成,所以只能自己写了