Вы также можете сделать это дополнительно
import re
string='24234ww'
val = re.search('[a-zA-Z]+',string)
val[0].isalpha() # returns True if the variable is an alphabet
print(val[0]) # this will print the first instance of the matching value
Также обратите внимание, что если переменная val возвращает None. Это означает, что поиск не нашел соответствия
Я не уверен, что полностью понимаю вопрос, но из названия вашего вопроса я предполагаю, что вы ищете pager.setCurrentItem( num )
. Это позволяет вам программно переключаться на другую страницу в ViewPager
.
Мне нужно будет увидеть трассировку стека из logcat, чтобы быть более конкретным, если это не проблема.
slide вправо
viewPager.arrowScroll (View.FOCUS_RIGHT);
слайд влево
viewPager.arrowScroll (View.FOCUS_LEFT);
для перехода на другую страницу, попробуйте с этим кодом:
viewPager.postDelayed(new Runnable()
{
@Override
public void run()
{
viewPager.setCurrentItem(num, true);
}
}, 100);
Не проверяя свой код, я думаю, что вы описываете, что ваши страницы не синхронизированы, и у вас есть устаревшие данные.
Вы говорите, что вы меняете количество страниц, а затем рушитесь, потому что вы доступ к старому набору страниц. Это звучит для меня так, как будто вы не вызываете pageAdapter.notifyDataSetChanged()
после изменения ваших данных.
Когда ваш viewPager
показывает страницу 3 из 10 страниц, и вы переходите к набору только с 5, затем вызовите notifyDataSetChanged()
, то, что вы найдете, теперь вы просматриваете страницу 3 нового набора. Если вы ранее просматривали страницу 8 старого набора, после ввода нового набора и вызова notifyDataSetChanged()
вы обнаружите, что теперь вы просматриваете последнюю страницу нового набора без сбоев.
Если вы просто измените текущую страницу, вы можете просто маскировать проблему.
Дополнительный ответ
У меня возникла проблема с получением ссылки на ViewPager
из других методов класса, потому что addOnTabSelectedListener
сделал анонимный внутренний класс, который, в свою очередь, потребовал переменную ViewPager
быть объявлено final
. Решение состояло в том, чтобы использовать переменную-член класса и не использовать анонимный внутренний класс.
public class MainActivity extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
// don't use an anonymous inner class here
tabLayout.addOnTabSelectedListener(tabListener);
}
TabLayout.OnTabSelectedListener tabListener = new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
};
// The view pager can now be accessed here, too.
public void someMethod() {
viewPager.setCurrentItem(0);
}
}