Android如何从我的主要活动中调用片段

我对android开发很新。

在我的情况下,我有一个主要活动和一个片段创建。主要活动为两个按钮。

当我点击按钮时,我的片段应该加载。我可以实现吗?

主动.XML

主要活动.java

 package com.bentgeorge.fragment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button fragment_btn_1; private Button fragment_btn_2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragment_btn_1 = (Button) findViewById(R.id.fragment_button_1); fragment_btn_2 = (Button) findViewById(R.id.fragment_button_2); } @Override public void onClick(View v) { Fragment1 frag = new Fragment1(); FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.add(R.id.mainlayout,frag,"Test Fragment"); transaction.commit(); } } 

fragment_fragment1.xml

     

Fragment1.java

 package com.bentgeorge.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * A simple {@link Fragment} subclass. */ public class Fragment1 extends Fragment { public Fragment1() { // 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_fragment1, container, false); } } 

没有做太多的代码,因为我与互联网可用的教程混淆。

请帮我解决这个问题

感谢和问候,

更新:

我做了一些更改,我的片段现在正在加载。 按钮仍然可见。 我该如何隐藏按钮

分段

更新:请更改您的MainActivity,如下所示:

  public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fragment fragment = new MainFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit(); } } 

像这样更改您的activity_main.xml:

  

请创建一个xml fragment_main.xml:

      

还要将片段创建为MainFragment:

 public class MainFragment extends Fragment implements View.OnClickListener{ private Button fragment_btn_1; private Button fragment_btn_2; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_main, container, false); fragment_btn_1 = (Button) view.findViewById(R.id.fragment_button_1); fragment_btn_2 = (Button) view.findViewById(R.id.fragment_button_2); fragment_btn_1.setOnClickListener(this); fragment_btn_2.setOnClickListener(this); return view; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.fragment_button_1: Fragment fragment1 = new Fragment1(); moveToFragment(fragment1); break; case R.id.fragment_button_2: Fragment fragment2 = new Fragment2(); moveToFragment(fragment2); break; } } private void moveToFragment(Fragment fragment) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit(); } } 

希望这会对你有所帮助。 如果您有任何疑问,请告诉我。

你在onClick()方法 –

 if(v.getId()==R.id.fragment_button_1){ getActivity().getSupportFragmentManager().beginTransaction() .add(R.id.fragment_frame, new Fragment1(), "createPost").addToBackStack(null).commit(); } 

其中R.id.fragment_frame – mainConctivity.java中的rootContainer Id rootView

你应该使用Framelayout将片段放入活动中。

如下所示 – activity_layout.xml –

       

和你的活动 – MainActivity.java

 import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; public class TestActivity extends AppCompatActivity implements View.OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); Button button1 = (Button) findViewById(R.id.button1); Button button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(this); button2.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_test, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public void onClick(View v) { if (v.getId() == R.id.button1){ getSupportFragmentManager().beginTransaction(). replace(R.id.root_layout, new Fragment1()).commit(); } } } 

顺便说一句,你的片段看起来不错 希望它能帮助你。

你不能通过Intent调用Fragments。 片段是FragmentActivity的一部分。

总而言之,Fragment是一个内容而不是容器,所以你需要创建一个FragmentActivity并在其中添加Fragment(Fragment1),然后调用你的onClick(),

 Intent intent = new Intent(MainActivity.this, SomeFragmentActivity.class); startActivity(intent); 

更多信息: 这里

使用片段中的getActivity()来访问活动函数。 如果要访问特定于您自己的活动类的函数。 在使用之前首先演示您获得的acticity对象,请参阅下面的示例

 MyActivityClass myActivity = (MyActivityClass) getActivity(); 

再创建一个活动,例如ExampleFragmentActivity.class,并在Framelay格式中的ExampleFragmentActivity布局中包含片段标记。

 public class ExampleFragmentActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.example_feagment_activity); } } 

example_fragment_activity.xml(修改)

     

在MainAcitivity.class的Onclick方法中

 Intent intent = new Intent(MainAcitivity.this,ExampleFragmentActivity.class); 

您还可以使用片段管理器动态包含片段。

 FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment1 fragment1 = new Fragment1(); fragmentTransaction.add(R.id.fragment_container, fragment1, "fragment"); fragmentTransaction.commit(); 
  FragmentTransaction fragmenttransaction = getSupportFragmentManager().beginTransaction(); HomeFragment regcomplainfragment = new HomeFragment(); fragmenttransaction.replace(R.id.content_frame, regcomplainfragment).addToBackStack("HomeFragment"); fragmenttransaction.commit();