Android:没有调用onTouch

时间:2010-08-04 07:54:44

标签: android

所以,我试图通过扫过屏幕开始活动,它适用于所有其他屏幕,只是这个屏幕根本不会触发onTouch?你介意帮帮我吗?我试过调试它仍然根本不知道。以下是代码,对不起我只是因为我认为我可能在其他地方做错了

顺便说一句,我也正在寻求有关实施扫地改变屏幕的建议。我已经阅读了ViewFlipper,我知道它可以很好地工作,但我有大约8个屏幕,需要不同的后端编码。无论如何,我真的需要这方面的建议。

非常感谢!!

阿尔文

<?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);
    }

1 个答案:

答案 0 :(得分:0)

您可以使用GestureDetector(这是检测滑动的更好方法)来检测活动的滑动。请在下面找到如何实现它的链接。我觉得您的代码问题是除了容器控件(在您的情况下为LinearLayout)之外,您还需要为所有控件注册TouchListerner。

Fling gesture detection on grid layout