2016-10-10 2 views
0

У меня возникают проблемы с фрагментом. У меня есть два фрагмента & оба фрагмента содержат List. То, что я делаю, - когда пользователь нажимает кнопку, фрагмент должен быть заменен другим фрагментом. Проблема, которую я получаю, когда я нажимаю кнопку, другой фрагмент приближается к текущему фрагменту.Как заменить фрагмент на другой фрагмент?

Скриншот

enter image description here

MainActivity

public class MainActivity extends Activity { 

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

    public void selectFrag(View view) { 
     Fragment fr; 

     if(view == findViewById(R.id.button2)) { 
      fr = new FragmentTwo(); 

     }else { 
      fr = new FragmentOne(); 
     } 

     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_place, fr); 
     fragmentTransaction.commit(); 

    } 

} 

FragmentOne.Class

public class FragmentOne extends ListFragment implements OnItemClickListener { 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.fragment_one, container, false); 
    } 


    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.action, android.R.layout.simple_list_item_1); 
     setListAdapter(adapter); 
     getListView().setOnItemClickListener(this); 
    } 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
     Object o = this.getListAdapter().getItem(position); 
     String pen = o.toString(); 

     // Toast.makeText(getActivity(), pen, Toast.LENGTH_SHORT).show(); 
    } 



} 

FragmentTwo.Class

public class FragmentTwo extends ListFragment implements OnItemClickListener { 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.fragment_two, container, false); 
    } 



    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.type, android.R.layout.simple_list_item_1); 
     setListAdapter(adapter); 
     getListView().setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
     Object o = this.getListAdapter().getItem(position); 
     String pen = o.toString(); 

     // Toast.makeText(getActivity(), pen, Toast.LENGTH_SHORT).show(); 
    } 

} 

activity_main

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

    <Button 
     android:id="@+id/button1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:onClick="selectFrag" 
     android:text="Fragment No.1" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:onClick="selectFrag" 
     android:text="Fragment No.2" /> 

    <fragment 
     android:id="@+id/fragment_place" 
     android:name="com.example.pitech09.myapplication.FragmentOne" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 
+0

Когда приложение запускается впервые не отображаются фрагменты, правильно? –

+0

FragmentOne отображается при запуске приложения –

+2

Убедитесь, что 'R.id.fragment_place' соответствует контейнеру макета (например,' FrameLayout') –

ответ

1

Как предложено @RishabhDuttSharma, Используйте FrameLayout вместо fragment в вашем деятельность layou t и инициализировать первый фрагмент кода.

Планировка:

<FrameLayout 
    android:id="@+id/fragment_place" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Код:

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

    Fragment fr = new FragmentOne(); 
    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_place, fr); 
    fragmentTransaction.commit(); 
} 
-1

Используйте этот код в ваш MainActivity

Button btnList = (Button) findViewById(R.id.btnList); 
    Button btnGrid = (Button) findViewById(R.id.btnGrid); 
    btnList.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final Fragment listfragment = new ListFragment(); 
      getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.fragment_place, listfragment).commit(); 

     } 
    }); 
    btnGrid.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final Fragment gridfragment = new GridFragment(); 
      getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.fragment_place, gridfragment).commit(); 
     } 
    }); 
+0

его не работает –

+0

Используйте рамку Layout вместо фрагмента. @KritiJain. –

+0

@KoVartthan еще одна проблема заключается в том, что вы предложили использовать 'getSupportFragmentManager', но он не использует' AppCompatActivity', поэтому вместо этого следует использовать 'getFragmentManager'. –

1

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

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
<!-- a frame layout for replace in full--> 
     <FrameLayout 
       android:id="@+id/fragment_place" 
       android:layout_width="fill_parent" 
       android:layout_height="match_parent"/> 

    </LinearLayout> 

// код фрагмента // здесь надо писать код и в зависимости от мыши событие можно заменить фрагменты

FragmentOne fr = new FragmentOne(); 
    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_place, fr); 
    fragmentTransaction.commit(); 

// Точно так же вы должны сделать в следующем фрагменте

Смежные вопросы