我试图在第一次运行应用时创建向导。我使用自定义ViewPager
来禁用滚动并使用上一个和下一个按钮滚动。我想要show show Toast警告用户,当用户点击下一个按钮并且表格是emtpy时,他必须填写表格,但我的代码不起作用
这是我的自定义ViewPager
package com.candlelightstudio.letsbesmartkid;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class DisableScrollViewPager extends ViewPager {
private boolean enabled;
public DisableScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
}
}
这是我的下一个按钮onClickListener
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int page = wizard.getCurrentItem();
if(page == 0 && (nama_dpn == null || nama_blkg == null)){
Toast.makeText(getApplicationContext(), "Lengkapi nama depan dan belakang", Toast.LENGTH_LONG).show();
}else{
wizard.setCurrentItem(1, true);
}
if(page == 1 && jk == null || jk.equalsIgnoreCase("Pilih jenis kelamin")){
Toast.makeText(getApplicationContext(), "Pilih jenis kelamin", Toast.LENGTH_LONG).show();
}else{
wizard.setCurrentItem(2, true);
}
if(wizard.getCurrentItem() == 2 && sekolah == null){
Toast.makeText(getApplicationContext(), "Masukkan nama sekolah kamu", Toast.LENGTH_LONG).show();
}else{
wizard.setCurrentItem(getItem(+1), true);
}
}
getItem()代码
private int getItem(int i){
return wizard.getCurrentItem() + i;
}
这是我的PagerAdapter
班级
private static class MyPagerAdapter extends FragmentPagerAdapter{
private int NUM_ITEMS = 3;
public MyPagerAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
switch(position){
case 0:
return FragmentIsiNama_Nama.newInstance(0);
case 1:
return FragmentIsiNama_JenisKelamin.newInstance(1);
case 2:
return FragmentIsiNama_Sekolah.newInstance(2);
default:
return null;
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return NUM_ITEMS;
}
}
更新
字符串变量nama_dpn, nama_blkg, jk, sekolah
值来自EditText
中的fragment
,我使用这样的方法
private int getItem(int i){
return wizard.getCurrentItem() + i;
}
void onNamaDepanChange(String nama_depan){
this.nama_dpn = nama_depan;
}
void onNamaBelakangChange(String nama_belakang){
this.nama_blkg = nama_belakang;
}
void onJenisKelaminChange(String gender){
this.jk = gender;
}
void onSekolahChange(String sekolah){
this.sekolah = sekolah;
}
并且在片段中,例如我将填充字符串nama_dpn。我喜欢这个
nama_depan.addTextChangedListener(new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
((IsiNama_Activity)getActivity()).onNamaDepanChange(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
我错了什么? :)谢谢
我编辑如下,但也没有工作
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int page = wizard.getCurrentItem();
if(page == 0 && (TextUtils.isEmpty(nama_dpn) || TextUtils.isEmpty(nama_blkg))){
Toast.makeText(getApplicationContext(), "Lengkapi nama depan dan belakang", Toast.LENGTH_LONG).show();
}else{
wizard.setCurrentItem(1, true);
}
if(page == 1 && (TextUtils.isEmpty(jk) || jk.equalsIgnoreCase("Pilih jenis kelamin"))){
Toast.makeText(getApplicationContext(), "Pilih jenis kelamin", Toast.LENGTH_LONG).show();
}else{
wizard.setCurrentItem(2, true);
}
if(wizard.getCurrentItem() == 2 && TextUtils.isEmpty(sekolah)){
Toast.makeText(getApplicationContext(), "Masukkan nama sekolah kamu", Toast.LENGTH_LONG).show();
}else{
wizard.setCurrentItem(getItem(+1), true);
}
}
已关闭
我找到了方法,在此之前我不认为为什么我必须使用方法onNamaDepanChange();
并使用这种方式EditText
发送((IsiNama_Activity)getActivity()).onNamaDepanChange(s.toString());
的值。我只是认为我可以使用这种nama_depan
方式设置((IsiNama_Activity)getActivity()).nama_depan = s.toString();
变量的值,并且它可以正常工作。当然,将nama_depan
的修饰符更改为公开。
在我的案例中存在错误逻辑。您可以在我的next.setOnClickListener()
函数中看到。 `if'中的每一行将被执行,所以为了防止滚动我赢了,我喜欢下面
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int page = wizard.getCurrentItem();
if(page == 0 && (nama_dpn == null || nama_blkg == null)){
Toast.makeText(getApplicationContext(), "Lengkapi nama depan dan belakang", Toast.LENGTH_LONG).show();
}else if(page == 0 && (nama_dpn != null || nama_blkg != null)){
wizard.setCurrentItem(1, true);
}
if(page == 1 && (jk == null || jk.equalsIgnoreCase("Pilih jenis kelamin"))){
Toast.makeText(getApplicationContext(), "Pilih jenis kelamin", Toast.LENGTH_LONG).show();
}else if(page == 1 && (jk != null || !jk.equalsIgnoreCase("Pilih jenis kelamin"))){
wizard.setCurrentItem(wizard.getCurrentItem()+1, true);
}
if(page == 2 && sekolah == null){
Toast.makeText(getApplicationContext(), "Masukkan nama sekolah kamu", Toast.LENGTH_LONG).show();
}else if(page == 2 && sekolah != null){
Toast.makeText(getApplicationContext(), "Sekolah : " + sekolah, Toast.LENGTH_LONG).show();
}
}