当字符串为空时,阻止在ViewPager中滚动

时间:2015-04-08 14:41:16

标签: android android-viewpager

我试图在第一次运行应用时创建向导。我使用自定义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();
                }
            }

0 个答案:

没有答案