2017-02-19 2 views
-1

im пытается использовать setContentView для переключения на макет с фрагментом внутри него , но он каждый раз падает Что мне делать? это мой весь код: (он должен переключиться на фрагмент_листа, когда я нажимаю кнопку в Activity_main) (у fragmant_layout есть фрагмент, а макет для frgment is te layout1) (он падает, когда я нажимаю кнопку для переключения)изменение вида на просмотр с фрагментом в android

Основная деятельность:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void switchlayout(View view) {//when the button in clicked 
    setContentView(R.layout.fragment_layout); 
} 

} 

класс фрагмент:

public class frgment extends Fragment { 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.layout1,container,false); 
} 
} 

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".fragmenttest.MainActivity"> 




<Button 
    android:text="Button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="switchlayout" 
    android:layout_marginTop="74dp" 
    android:id="@+id/button" /> 
</RelativeLayout> 

fragment_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<fragment 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:name="alirezamellat.fragmenttest.frgment" 
    ></fragment> 

</LinearLayout> 

layout1.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<View 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorAccent"></View> 

</LinearLayout> 
+1

менеджер использование фрагмента и раздувать родительское представление с вашим фрагментом. Посмотрите этот ресурс, предоставленный android :: https://developer.android.com/guide/components/fragments.html – Bayou

ответ

0

После того, как макет одного из видов деятельности был установлен, что может не быть изменено на более позднее время.
Существует несколько способов достижения этого, из которых самым простым было бы иметь макет оболочки и затем вставлять фрагмент внутри него с помощью класса FragmentManager.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".fragmenttest.MainActivity"> 

<FrameLayout 
    android:id="@+id/wrapper" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</FrameLayout> 
<Button 
    android:text="Button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="switchlayout" 
    android:layout_marginTop="74dp" 
    android:id="@+id/button" /> 
</RelativeLayout> 

И затем на вашей кнопке щелкните добавить фрагмент.

getSupportFragmentManager().beginTransaction().add(R.id.wrapper, MyFragment.newInstance(), "FragTag").commit(); 

Помните, что вам необходимо позаботиться о своей кнопке, так как она все еще будет видна поверх вашего фрагмента.

2

Пожалуйста, обратите внимание на следующие моменты ::

  1. На вашей материнской макете (activity_main.xml), внутри Relative макета, добавьте еще один макет под названием FrameLayout.
  2. На макете фрагмента (fragment_layout.xml), удалить фрагмент и добавить макеты из layout1.xml в fragment_layout.xml
  3. На ваш фрагмент класса (MyFragment), надуть fragment_layout.xml в контейнер и вернуть view (имя класса должно начинаться с буквы верхнего регистра, так что назовите его как MyFragment)
  4. В классе Activity поместите следующий код в onclick прослушиватель.

    //onClick on OnClickListener 
    
    MyFragment fragment = new MyFragment(); 
    getSupportFragmentManager().beginTransaction() 
        .add(R.id.frame_layout, fragment) 
        .commit(); 
    
Смежные вопросы