2014-10-30 88 views
0

我使用3個靜態片段和一個視圖尋呼機適配器創建了一個小應用程序。但我想要的是創建只有一種片段和按鈕「添加」,添加其他片段,這將由視圖尋呼機改編..這裏是我所做的如何動態添加幾個片段

FragmentTab1.java; FragmentTab2; FragmentTab3有相同的代碼

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class FragmentTab2 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Get the view from fragmenttab2.xml 
     View view = inflater.inflate(R.layout.fragmenttab2, container, false); 
     return view; 
    } 

} 

這裏是我的MainActivity.java

import android.app.Fragment; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class MainActivity extends FragmentActivity { 

    //Button adfg = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Get the view from activity_main.xml 
     setContentView(R.layout.activity_main);   
     // Locate the viewpager in activity_main.xml 
     ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 

     // Set the ViewPagerAdapter into ViewPager 
     viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); 
    } 
} 

ViewPagerAdapter.java

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class ViewPagerAdapter extends FragmentPagerAdapter { 

    final int PAGE_COUNT = 3; 
    // Tab Titles 
    private String tabtitles[] = new String[] { "Tab1", "Tab2", "Tab3" }; 

    Context context; 

    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 

      // Open FragmentTab1.java 
     case 0: 
      FragmentTab1 fragmenttab1 = new FragmentTab1(); 
      return fragmenttab1; 


      // Open FragmentTab2.java 
     case 1: 
      FragmentTab2 fragmenttab2 = new FragmentTab2(); 
      return fragmenttab2; 

      // Open FragmentTab3.java 
     case 2: 
      FragmentTab3 fragmenttab3 = new FragmentTab3(); 
      return fragmenttab3; 
     } 
     return null; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabtitles[position]; 
    } 
} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <android.support.v4.view.PagerTabStrip 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:paddingBottom="10dp" 
     android:paddingTop="10dp" 
     android:textColor="#000000" /> 

</android.support.v4.view.ViewPager> 

fragmenttab1.xml; fragmenttab2.xml; fragmenttab3.xml具有相同的代碼

<?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" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Fragment 1" /> 

    <Button 
     android:id="@+id/bajou" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Ajouter fragment" /> 

</LinearLayout> 

回答

0

你需要創建一個方法來添加對FragmentPagerAdapter子類中的片段,或多或少是這樣的:

//use those lists 
private List<Fragment> listFragment = new ArrayList<Fragment>(); 
private List<String> listFragmentTitle = new ArrayList<String>(); 
private List<Integer> listFragmentIcon = new ArrayList<Integer>(); 

public void addTab(Fragment fragment,String title, int icon) { 
    listFragment.add(fragment); 
    listFragmentTitle.add(title); 
    listFragmentIcon.add(icon); 
} 

@Override 
public Fragment getItem(int position) { 
    // TODO Auto-generated method stub 
    return listFragment.get(position); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return listFragment.size(); 
} 

然後你只需要使用它上的Activity子類,例如:

//create a private method to set a new - dynamic fragment in the ACTIVITY 
private Fragment setFragment(int pos) 
{ 
    MyFragment myFragment = new MyFragment(); 
    Bundle data = new Bundle(); 
    data.putString("test", "test"); 
    myFragment.setArguments(data); 
    return myFragment; 
} 

最後,添加片段(例如,onClickListener內側):

//INSIDE an onClickListener 
pagerAdapter.addTab(setFragment(position), getItem(position).getName(), R.drawable.ic_launcher); 
+0

謝謝你,但是,當我添加pagerAdapter.addTab(setFragment(位置)的getItem(位置).getName(),R.drawable .ic_launcher);在Activity類中的onClickListner中,它也問我也創建了一個locale變量「position」並創建了Methode setFragment getItem,否則,所以我很困惑 – 2014-10-31 12:32:27

+0

@borislight請發佈您的onclick代碼。 「位置」應該是第三參數(「int」一個) – 2014-10-31 14:33:24

0

這是我MainActivity.java類@BlazeTama

package com.light.frag; 

import com.light.frag.R; 
import com.light.frag.ViewPagerAdapter; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 


public class MainActivity extends FragmentActivity implements OnClickListener{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // Locate the viewpager in activity_main.xml 
     ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     // Set the ViewPagerAdapter into ViewPager 
     viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); 
     Button ajou = (Button) findViewById(R.id.bajou); 
     ajou.setOnClickListener(this); 
    } 
    private Fragment setFragment(int pos) 
    { 
     MyFragment myFragment = new MyFragment(); 
     Bundle data = new Bundle(); 
     data.putString("test", "test"); 
     myFragment.setArguments(data); 
     return myFragment; 
    } 
    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.bajou: 
      ViewPagerAdapter.addTab(setFragment(position), getItem(position).getName(), R.drawable.ic_launcher); 
      break; 
     } 

    }  
}