1

如何動態添加Tabs & Fragment?如何動態添加Tabs&Fragment

我的代碼:

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    for (int i = 0; i < 4; i++) { 
    adapter.addFrag(new TabFragment(), "Tab"+i); 
    } 
    viewPager.setAdapter(adapter); 
    } 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

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

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFrag(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

標籤片段

public class TabFragment extends ListFragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activty_listview,container, false); 
    listView = (ListView) rootView.findViewById(android.R.id.list); 
    return rootView; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

} 

}

假設我的標籤名稱是動態地根據 「TAB1,TAB2,TAB3」 我怎樣才能添加標籤數組如果我得到以上和如何選項卡片段知道哪個選項卡選擇。

歡迎任何建議。

感謝提前:)

回答

0
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/sliding_tabs" 
     android:layout_width="fill_parent" 
     app:tabMode="fixed" 
     android:background="#ff0000" 
     app:tabGravity="fill" 
     android:layout_height="48dp" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:layout_below="@+id/sliding_tabs" 
     android:background="@android:color/white" /> 

</RelativeLayout> 

Activity: 


public class MainActivity extends AppCompatActivity { 

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

    int icons[] = {R.mipmap.createuser, R.mipmap.ico_password, R.mipmap.gplus, R.mipmap.fb}; 
    int colors[] = {Color.YELLOW, Color.CYAN, Color.LTGRAY, Color.CYAN}; 

    void initViews() { 
     TabLayout tabs = (TabLayout) findViewById(R.id.sliding_tabs); 
     ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
     LayoutInflater inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     ArrayList<Fragment> fragments = new ArrayList<>(Arrays.asList(new Fragment1(),new Fragment2(),new Fragment3(),new Fragment4())); 

     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(),fragments); 
     pager.setAdapter(adapter); 
     tabs.setupWithViewPager(pager); 
     for (int i = 0; i < 4; i++) { 
      View view = inflator.inflate(R.layout.tabs,null,false); 

      TextView title = (TextView)view.findViewById(R.id.title); 
      RelativeLayout layout = (RelativeLayout)view.findViewById(R.id.layout); 
      ImageView icon = (ImageView)view.findViewById(R.id.icon); 
      title.setText("Tab" + i); 
      layout.setBackgroundColor(colors[i]); 
      icon.setImageResource(icons[i]); 
      // tabs.getTabAt(i).setCustomView(view); 
     tabs.getTabAt(i).setIcon(icons[i]); 

     } 

    } 


    @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_main, 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); 
    } 
} 

Adapter: 

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

import java.util.List; 

/** 
* Created by rohit.h on 12/21/2015. 
*/ 
public class ViewPagerAdapter extends FragmentPagerAdapter { 

    String titles[] = {"Tab1", "Tab2", "Tab3", "Tab4"}; 
    private final List<Fragment> fragments; 

    public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return titles[position]; 
    } 
} 
+0

我爲所有選項卡創建相同的片段我如何diffrentiate –

+0

uneed在運行時爲選項卡創建片段和標題的列表,並通知適配器它可以自動刷新它或PLZ顯示您的代碼 –

+0

我已更新我的代碼請讓我知道如何獲得價值:如果我選擇tab1,我如何在我的片段中獲得價值。 –

0
mTabLayout = (TabLayout)rootView.findViewById(R.id.tab_layout); 
     mTabLayout.addTab(mTabLayout.newTab().setText(getResources().getString(R.string.tab1))); 
     mTabLayout.addTab(mTabLayout.newTab().setText(getResources().getString(R.string.tab2))); 
     mTabLayout.addTab(mTabLayout.newTab().setText(getResources().getString(R.string.tab3))); 
     mTabLayout.addTab(mTabLayout.newTab().setText(getResources().getString(R.string.tab4))); 
     mTabLayout.addTab(mTabLayout.newTab().setText(getResources().getString(R.string.tab5))); 
     mTabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
     mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); 

     mViewPager = (ViewPager)rootView.findViewById(R.id.pager); 

     mPagerAdapter = new PagerAdapter 
       (getActivity().getSupportFragmentManager(), mTabLayout.getTabCount()); 

     mViewPager.setAdapter(mPagerAdapter); 
     mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout)); 

你可以參考this鏈接

0

一個簡單的解決方案(但不是最好的/完美的人)將是添加的片段適配器和設置tablayout和適配器在運行時再次查看pager。將不會乾淨/可能會生澀,但一定會工作。

編輯:: 有一個FragmentPagerAdapter中的方法,它也設置爲viewpager和tablayout:notifyDataSetChanged()。在從尋呼機適配器插入和刪除片段後使用此方法。我試圖插入它的作品。應該肯定也適用於移除。

+0

一個非常簡單的答案。我認爲你應該嘗試添加一些示例代碼。 – GhostCat