简体   繁体   English

Android:未调用onTouch

[英]Android: onTouch not called

So, i'm trying to start activity by sweeping across the screen, it works fine for all the other screens, just this screen that doesn't fire the onTouch at all? 因此,我正在尝试通过扫过整个屏幕来开始活动,对于其他所有屏幕都可以正常工作,只是该屏幕根本无法触发onTouch? Would you mind helping me? 你介意帮我吗? I've tried debugging it and still have no idea at all. 我尝试调试它,但仍然一无所知。 Below are the codes, sorry for not putting snippets only as I thought I might did something wrong elsewhere 以下是代码,对不起您未放入摘要,因为我以为我可能在其他地方做错了

Btw, I'm also looking for advice on implementing sweeping to change screen. 顺便说一句,我也在寻求有关实施扫掠以更改屏幕的建议。 I've read about ViewFlipper and I know it will work very well, but I've around 8 screens with different backend coding needed. 我已经阅读了有关ViewFlipper的信息,并且我知道它会很好地工作,但是我大约有8个屏幕需要不同的后端编码。 Anyways, I really need advice on this. 无论如何,我真的需要为此提供建议。

Thanks alot!! 非常感谢!!

Alvin 阿尔文

<?xml version="1.0" encoding="utf-8"?>

    <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:textSize="20dip"
            android:padding="5dip" android:textStyle="bold" android:text="@string/skills" />

    <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:padding="5dip"
            android:textSize="12dip" android:layout_marginLeft="10dip"
            android:text="@string/proficiency" />

    <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:orientation="horizontal"
            android:gravity="center">
            <Button android:id="@+id/cSharp" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/cSharp" />
            <Button android:id="@+id/cLang" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/cLang" />
            <Button android:id="@+id/visualC" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/visualC" />
            <Button android:id="@+id/java" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/java" />
            <Button android:id="@+id/vb" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/vb" />
    </LinearLayout>

    <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:orientation="horizontal"
            android:gravity="center">
            <Button android:id="@+id/perl" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/perl" />
            <Button android:id="@+id/win" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/win" />
            <Button android:id="@+id/unix" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/unix" />
            <Button android:id="@+id/linux" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/linux" />
            <Button android:id="@+id/php" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/php" />
    </LinearLayout>

    <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:orientation="horizontal"
            android:gravity="center">
            <Button android:id="@+id/oracle" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/oracle" />
            <Button android:id="@+id/mysql" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/mysql" />
            <Button android:id="@+id/mssql" android:layout_height="60dip"
                    android:layout_width="80dip" android:text="@string/mssql" />
    </LinearLayout>

    <LinearLayout android:layout_width="fill_parent"
            android:layout_height="fill_parent" android:padding="5dip"
            android:orientation="horizontal" android:gravity="bottom|right">
            <ImageButton android:id="@+id/skillsPrevious"
                    android:layout_width="wrap_content" android:layout_height="wrap_content"
                    android:background="@null" android:paddingRight="3dip" android:src="@drawable/left" />
            <ImageButton android:id="@+id/skillsNext"
                    android:layout_width="wrap_content" android:layout_height="wrap_content"
                    android:background="@null" android:src="@drawable/right" />
    </LinearLayout>

    private float oldTouchValue;
    private FormDbAdapter mDbHelper;
    private Long mRowId;
    private Button cSharp, cLang, visualC, java, vb, perl, win, unix;
    private Button linux, php, oracle, mysql, mssql;
    private ImageButton nextButton, previousButton;
    private LinearLayout skillsView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            mDbHelper = new FormDbAdapter(this);
            mDbHelper.open();
            setContentView(R.layout.skills);

            cSharp = (Button)findViewById(R.id.cSharp);
            cLang = (Button)findViewById(R.id.cLang);
            visualC = (Button)findViewById(R.id.visualC);
            java = (Button)findViewById(R.id.java);
            vb = (Button)findViewById(R.id.vb);
            perl = (Button)findViewById(R.id.perl);
            win = (Button)findViewById(R.id.win);
            unix = (Button)findViewById(R.id.unix);
            linux = (Button)findViewById(R.id.linux);
            php = (Button)findViewById(R.id.php);
            oracle = (Button)findViewById(R.id.oracle);
            mysql = (Button)findViewById(R.id.mysql);
            mssql = (Button)findViewById(R.id.mssql);

            nextButton = (ImageButton)findViewById(R.id.skillsNext);
            previousButton = (ImageButton)findViewById(R.id.skillsPrevious);

            skillsView = (LinearLayout)findViewById(R.id.skillsView);

            mRowId = (savedInstanceState == null)? null:
                    (Long)savedInstanceState.getSerializable(FormDbAdapter.KEY_ID);
            if(mRowId == null){
                    Bundle extras = getIntent().getExtras();
                    mRowId = extras.getLong(FormDbAdapter.KEY_ID);
            }

            populateFields();

            nextButton.setOnClickListener(onClick);
            previousButton.setOnClickListener(onClick);

            cSharp.setOnClickListener(onClick);
            cLang.setOnClickListener(onClick);
            visualC.setOnClickListener(onClick);
            java.setOnClickListener(onClick);
            vb.setOnClickListener(onClick);
            perl.setOnClickListener(onClick);
            win.setOnClickListener(onClick);
            unix.setOnClickListener(onClick);
            linux.setOnClickListener(onClick);
            php.setOnClickListener(onClick);
            oracle.setOnClickListener(onClick);
            mysql.setOnClickListener(onClick);
            mssql.setOnClickListener(onClick);

            skillsView.setOnTouchListener(new View.OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                            // TODO Auto-generated method stub
                            switch(event.getAction()){
                            case MotionEvent.ACTION_DOWN:
                                    oldTouchValue = event.getX();
                                    break;
                            case MotionEvent.ACTION_UP:
                                    if(event.getX() - oldTouchValue < -200){
                                            createIntent(true);
                                            return true;
                                    }else if(event.getX() - oldTouchValue > 200){
                                            createIntent(false);
                                            return true;
                                    }
                            }
                            return false;
                    }
            });
    }

    protected View.OnClickListener onClick = new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                    // TODO Auto-generated method stub
                    switch(v.getId()){
                    case R.id.skillsNext:
                            createIntent(true);
                            break;
                    case R.id.skillsPrevious:
                            createIntent(false);
                            break;
                    default:
                            addSkillDialog(v.getId());
                    }
            }
    };

    /** direction = true => next page
     *  direction = false => previous page*/
    protected void createIntent(boolean direction){
            if(direction){
                    Intent i = new Intent();
                    i.putExtra(FormDbAdapter.KEY_ID, mRowId);
                    i.setClass(skills.this, languages.class);
                    startActivityForResult(i, 0);
            }else{
                    setResult(RESULT_OK);
                    finish();
            }
    }

    /** Create custom dialog for user to input skills info.
     * @param id: id of the button clicked by user. */
    protected void addSkillDialog(int id) {
            // TODO Auto-generated method stub
            final Button button = (Button)findViewById(id);

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            AlertDialog alertDialog;

            LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
            final View layout = inflater.inflate(R.layout.skillsdialog,
                            (ViewGroup)findViewById(R.id.skillsDialogId));

            builder.setView(layout);

            final RadioGroup radioExp = (RadioGroup)layout.findViewById(R.id.radioExp);
            final RadioGroup radioPro = (RadioGroup)layout.findViewById(R.id.radioPro);

            Cursor c = mDbHelper.fetchSkills(mRowId, button.getId());
            if(c.moveToFirst()){
                    startManagingCursor(c);
                    if(c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_YEARS)).equals("0")){
                            radioExp.check(R.id.zeroYear);
                    }else if (c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_YEARS)).equals("1-2")){
                            radioExp.check(R.id.onetotwo);
                    }else if (c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_YEARS)).equals("3-4")){
                            radioExp.check(R.id.threetofour);
                    }else{
                            radioExp.check(R.id.five);
                    }

                    if(c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_PRO)).equals("B")){
                            radioPro.check(R.id.B);
                    }else if(c.getString(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_PRO)).equals("I")){
                            radioPro.check(R.id.I);
                    }else{
                            radioPro.check(R.id.A);
                    }
            }

            builder.setTitle(button.getText().toString())
            .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                            String years = null;
                            String pro = null;
                            int expId = radioExp.getCheckedRadioButtonId();
                            int proId = radioPro.getCheckedRadioButtonId();

                            switch(expId){
                            case R.id.zeroYear:
                                    years = "0";
                                    break;
                            case R.id.onetotwo:
                                    years = "1-2";
                                    break;
                            case R.id.threetofour:
                                    years = "3-4";
                                    break;
                            case R.id.five:
                                    years = ">5";
                            }

                            switch(proId){
                            case R.id.B:
                                    pro = "B";
                                    break;
                            case R.id.I:
                                    pro = "I";
                                    break;
                            case R.id.A:
                                    pro = "A";
                            }

                            mDbHelper.newSkill(mRowId, button.getId(), pro, years);
                            button.setTypeface(Typeface.DEFAULT_BOLD);
                    }
            })
            .setNeutralButton("Undo Selection", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                            mDbHelper.deleteSkill(mRowId, button.getId());
                            button.setTypeface(Typeface.DEFAULT);
                    }
            })
            .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                            dialog.cancel();
                    }
            });

            alertDialog = builder.create();
            alertDialog.show();
    }

    /** Populate the fields in View if existed in database. */
    protected void populateFields(){
            Cursor c = mDbHelper.fetchAllSkills(mRowId);
            while (c.moveToNext()){
                    startManagingCursor(c);
                    Button skillBtn = (Button)findViewById(c.getInt(c.getColumnIndexOrThrow(FormDbAdapter.KEY_SKILL_NAME)));
                    skillBtn.setTypeface(Typeface.DEFAULT_BOLD);
            }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
            switch (resultCode){
            case MainPage.ACTIVITY_BACK:
                    populateFields();
                    break;
            case MainPage.ACTIVITY_DONE:
                    setResult(MainPage.ACTIVITY_DONE);
                    finish();
            }
    }

    @Override
    protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            populateFields();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
            // TODO Auto-generated method stub
            super.onSaveInstanceState(outState);
            outState.putSerializable(FormDbAdapter.KEY_ID, mRowId);
    }

You can use GestureDetector (Which is a better way to detect swipes) to detect swipes on your activities. 您可以使用GestureDetector(这是检测滑动的更好方法)来检测活动的滑动。 Please find below link which shows how to implement it. 请在下面的链接中找到如何执行它的链接。 The issue with your code which I feel is that apart from container control(LinearLayout in your case) you need to register the TouchListerner for all the controls also. 我认为您的代码存在的问题是,除了容器控件(在您的情况下为LinearLayout)之外,您还需要为所有控件注册TouchListerner。

Fling gesture detection on grid layout 网格布局上的翻转手势检测

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM