首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法设置OnTouchListener

无法设置OnTouchListener
EN

Stack Overflow用户
提问于 2012-05-23 18:31:04
回答 1查看 2.4K关注 0票数 2

福克斯,这将是一个愚蠢的错误,但我真的不能猜测它在哪里。我正在尝试设置OnTouchListener,但未调用onTouch方法。

下面是我的代码:

代码语言:javascript
复制
    public class StepActivity extends SherlockActivity  
    {
    private Recipe recipe = null;
    private String TAG = "StepActivity";
    private ArrayList<Step> steps;
    private int caret = 0;
    private int currentStep = 1;
    private int stepQuantity;
    private TextView viewStepBody;
    private TextView stepNumber;
    private ImageView viewPicture;
    private String bodyText;
    private String picture;
    private String [] pictures = new String [5];



    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.step_page);
        RelativeLayout view = new RelativeLayout(this);
        view.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motion) {

                Log.i(TAG, "In onTouch");
                float downXValue = 0;
                // Get the action that was done on this touch event
                switch (motion.getAction())
                {

                    case MotionEvent.ACTION_DOWN:
                    {
                        Log.i(TAG, "In onTouch1");
                        // store the X value when the user's finger was pressed down
                        downXValue = motion.getX();
                        break;
                    }

                    case MotionEvent.ACTION_UP:
                    {
                        Log.i(TAG, "In onTouch2");
                        // Get the X value when the user released his/her finger
                        float currentX = motion.getX();            
                        // going backwards: pushing stuff to the right
                        if (downXValue < currentX)
                        {
                            Log.i(TAG, "In onTouch previous");
                            goPrevious();
                        }

                        // going forwards: pushing stuff to the left
                        if (downXValue > currentX)
                        {
                            Log.i(TAG, "In onTouch next");
                            goNext();
                        }
                        break;
                    }
                }
                // if you return false, these actions will not be recorded
                return true;
            }

        });

        viewStepBody = (TextView)findViewById(R.id.step_body);
        stepNumber = (TextView)findViewById(R.id.step_number);
        viewPicture = (ImageView)findViewById(R.id.picture);


        TextView recipeTitle = (TextView)findViewById(R.id.recipe_title);
        try {
            getSupportActionBar().setDisplayShowTitleEnabled(false);
            recipe = (Recipe)getIntent().getSerializableExtra("Recipe1");
            steps = recipe.getSteps();
            stepQuantity = steps.size();

            Log.d(TAG,"steps: " + steps.size());
            if (stepQuantity > 0) {
                Step step = steps.get(0);
                pictures[0] = Constants.URL + step.getImg_url();
                bodyText =  step.getInstruction();
                new DownloadImageTask().execute(pictures);
                recipeTitle.setText(recipe.getTitle());
            }
            updateInfo();
        } catch (Exception e) {
            Toast.makeText(this, "Error occured" + e.getMessage(), 200);
        }

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater();
        inflater.inflate(R.menu.step_menu, (com.actionbarsherlock.view.Menu) menu);
        return super.onCreateOptionsMenu(menu);
    }

    private void updateInfo() {
        new DownloadImageTask().execute(pictures);
        viewStepBody.setText(bodyText);
        stepNumber.setText(currentStep + "/" + stepQuantity);
    }

    private void goNext() {
        if (currentStep != stepQuantity) {
            caret++;
            currentStep++;
            Step newStep = steps.get(caret);
            pictures[0] = Constants.URL + newStep.getImg_url();
            bodyText = newStep.getInstruction();
            updateInfo();
        } else {
            caret = 0;
            currentStep = 1;
            Step newStep = steps.get(caret);
            bodyText = newStep.getInstruction();
            pictures[0] = Constants.URL + newStep.getImg_url();
            updateInfo();
        }
    }

    private void goPrevious() {
        if (currentStep != 1) {
            caret--;
            currentStep--;
            Step newStep = steps.get(caret);
            bodyText = newStep.getInstruction();
            pictures[0] = Constants.URL + newStep.getImg_url();
            updateInfo();
        }
        else {
            caret = stepQuantity - 1;
            currentStep = stepQuantity;
            Step newStep = steps.get(caret);
            bodyText = newStep.getInstruction();
            pictures[0] = Constants.URL + newStep.getImg_url();
            updateInfo();
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId())  {
        case R.id.next: 
            goNext();
            return true;
        case R.id.previous: 
            goPrevious();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

下面是传递给setContentView()方法的step_page.xml。

代码语言:javascript
复制
    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:id="@+id/step_layout1">
<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView android:id="@+id/recipe_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="23dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:textColor="#9d9d9d"
            android:textStyle="bold"
            android:layout_marginTop="4dp"/>

        <TextView android:id="@+id/step_word"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25dp"
            android:layout_below="@+id/recipe_title"
            android:textColor="#000000"
            android:textStyle="bold"
            android:text="@string/step_word"
            android:layout_marginTop="4dp"/>

        <TextView android:id="@+id/step_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25dp"
            android:layout_toRightOf="@+id/step_word"
            android:layout_below="@+id/recipe_title"
            android:textColor="#000000"
            android:textStyle="bold"
            android:layout_marginLeft="3dp"
            android:text="1/12"
            android:layout_marginTop="4dp"/>



        <ImageView
            android:id="@+id/picture"
            android:layout_width="300dp"
            android:layout_height="200dp"
            android:layout_below="@+id/step_word"
            android:layout_centerHorizontal="true"
            />

        <TextView android:id="@+id/step_body"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="22dp"
            android:textColor="#000000"
            android:paddingTop="2dp"
            android:layout_below="@+id/picture"
            /> 

    </RelativeLayout>
</ScrollView>
</RelativeLayout>

这里建议的另一种方法不起作用。:

代码语言:javascript
复制
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.step_page);
    RelativeLayout view = (RelativeLayout) findViewById(R.id.step_layout1);
    view.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motion) {

            Log.i(TAG, "In onTouch");
            float downXValue = 0;
            // Get the action that was done on this touch event
            switch (motion.getAction())
            {

                case MotionEvent.ACTION_DOWN:
                {
                    Log.i(TAG, "In onTouch1");
                    // store the X value when the user's finger was pressed down
                    downXValue = motion.getX();
                    break;
                }

                case MotionEvent.ACTION_UP:
                {
                    Log.i(TAG, "In onTouch2");
                    // Get the X value when the user released his/her finger
                    float currentX = motion.getX();            
                    // going backwards: pushing stuff to the right
                    if (downXValue < currentX)
                    {
                        Log.i(TAG, "In onTouch previous");
                        goPrevious();
                    }

                    // going forwards: pushing stuff to the left
                    if (downXValue > currentX)
                    {
                        Log.i(TAG, "In onTouch next");
                        goNext();
                    }
                    break;
                }
            }
            // if you return false, these actions will not be recorded
            return true;
        }

    });

有什么意见吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-23 19:06:49

与我认为您认为RelativeLayout view = new RelativeLayout(this);所做的相反,它不会为您的活动布局提供父RelativeLayout视图。您可以做的是为您的父RelativeLayout分配一个id,使用findViewById获取它,并将您的onTouchListener或其他任何东西附加到它。

编辑(因为您发布了xml布局)

您的父RelativeLayout不会暴露-整个屏幕都被ScrollView占据,因此它背后的RelativeLayout永远无法触摸。由于您的内部RelativeLayout (ScrollView中的视图)中没有任何可单击的视图,因此可以将onTouch附加到该视图上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10718142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档