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