**我试图动态添加滑动选项卡,但在使用setupWithViewPager添加选项卡时,它会在tabLayout.setupWithViewPager(viewPager)中显示以下异常
03-17 15:01:24.593 3683-3718/info.androidhive.materialtabs I/OpenGLRenderer: Initialized EGL, version 1.4
03-17 15:01:24.611 3683-3718/info.androidhive.materialtabs D/OpenGLRenderer: Enabling debug mode 0
03-17 15:01:24.691 3683-3683/info.androidhive.materialtabs I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@3feea074 time:133990912
03-17 15:01:26.807 3683-3683/info.androidhive.materialtabs I/Timeline: Timeline: Activity_launch_request id:info.androidhive.materialtabs time:133993028
03-17 15:01:26.854 3683-3683/info.androidhive.materialtabs D/Action: Called In setViewPager
03-17 15:01:26.857 3683-3683/info.androidhive.materialtabs D/AndroidRuntime: Shutting down VM
03-17 15:01:26.862 3683-3683/info.androidhive.materialtabs E/AndroidRuntime: FATAL EXCEPTION: main
Process: info.androidhive.materialtabs, PID: 3683
java.lang.RuntimeException: Unable to start activity ComponentInfo{info.androidhive.materialtabs/info.androidhive.materialtabs.activity.CustomViewTabsActivity}: java.lang.IllegalArgumentException: ViewPager does not have a PagerAdapter set
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)
Caused by: java.lang.IllegalArgumentException: ViewPager does not have a PagerAdapter set
at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:591)
at info.androidhive.materialtabs.activity.CustomViewTabsActivity.onCreate(CustomViewTabsActivity.java:66)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)
**
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CustomViewTabsActivity extends AppCompatActivity {
private Toolbar toolbar;
private ViewPager viewPager;
private TabLayout tabLayout;
ArrayList<String> tabledata = null;
ArrayList<ArrayList> tablist=new ArrayList< ArrayList>();
//private ArrayList<String> tablist = new ArrayList<>();
Connection connection;
Statement statement;
Connectionclass connectionclass;
@Override
protected void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.custom_swipetab);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
// ViewPager viewPager;
viewPager = (ViewPager)findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);---->>(Here I got Exceptions)
try {
connection = connectionclass.CONN();
Log.d("DATA", "Connected" + connection);``
String tabquery = "select Attribute_Name from TBL_PRD_ATTRIBUTES where Screen_id=637 and Entry_Mode='HEADER' ";
statement = connection.createStatement();
Log.d("Action", "Statement Created");
ResultSet resultSet = null;
resultSet = statement.executeQuery(tabquery);
while (resultSet.next()) {
tabledata = new ArrayList<String>();
tabledata.add(resultSet.getString(1));
tablist.add(tabledata);
// tabLayout.setupWithViewPager(viewPager);
}
Log.d("Data","In TABList"+tablist);
setupViewPager(viewPager);
} catch (Exception e) {
Log.e("Error", "Connection Error" + e.getMessage());
}
}
private void setupViewPager(ViewPager viewPager) {
Log.d("Action","Called In setViewPager");
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
Iterator iterator = tablist.iterator();
ArrayList<String> getdata = null;
while (iterator.hasNext()) {
getdata = (ArrayList) iterator.next();
Log.d("Action","IN WHILE");
for (int k = 0; k < getdata.size(); k++) {
String tableviewer = getdata.get(k);
adapter.addFrag(new OneFragment(), "ONE");
adapter.addFrag(new TenFragment(), tableviewer);
Log.d("Action", "In TabCreation");
Log.d("DATA","Created TAB is"+tableviewer);
viewPager.setAdapter(adapter);
}
}
}
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(getSupportFragmentManager());
}
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
Log.d("DATA", "FragmentList" + mFragmentList);
mFragmentTitleList.add(title);
Log.d("DATA", "FragmentTitleList" + mFragmentTitleList);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
答案 0 :(得分:4)
在添加所有tabLayout.setupWithViewPager(viewPager)
之后,将setupViewPager(viewPager)
移至tabledata
的第二次调用之下。原因是:
在向setupViewPager(viewPager)
添加tabledata
之前,您正在呼叫tablist
,因此在尝试对其进行迭代时,您的Iterator
为空,您永远不会致电viewPager.setAdapter(adapter)
},这就是你得到这个错误的原因。
答案 1 :(得分:0)
java.lang.IllegalArgumentException:ViewPager没有PagerAdapter集
发生此错误是因为您的代码未执行viewPager.setAdapter(adapter);
在setupViewPager(ViewPager viewPager)
方法中,首次创建活动时,tablist
为空。因此,iterator.hasnext();
是错误的。
相反,请使用以下
替换代码private void setupViewPager(ViewPager viewPager) {
Log.d("Action","Called In setViewPager");
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
for (int k = 0; k < getdata.size(); k++) {
String tableviewer = getdata.get(k);
adapter.addFrag(new OneFragment(), "ONE");
adapter.addFrag(new TenFragment(), tableviewer);
Log.d("Action", "In TabCreation");
Log.d("DATA","Created TAB is"+tableviewer);
}
viewPager.setAdapter(adapter);
}
答案 2 :(得分:0)
当我从另一个片段返回到viewpager片段时遇到问题,我在移动到另一个片段之前在片段中以这种方式解决了该问题
override fun onPause() {
super.onPause()
viewPager.setAdapter(null)
}
override fun onPause() {
super.onPause()
viewPager.adapter = null
}
这样,从我的另一个片段回来,我再次设置了适配器,它工作正常