English 中文(简体)
无法设置在 TTotoTot 监听器上
原标题:Cannot set OnTouchListener

Falks, it is going to be silly mistake but I really cannot guess where is it. I`m trying to set OnTouchListener but method onTouch is not invoked.

这是我的代码:

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

这是我的一步_ page. xml 传递到 ContentView () 的设置方法 。

    <?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>

还有一个方法在这里被建议是行不通的。

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

    });

有意见吗?

最佳回答

与我认为您认为 < code> relativeLayout view = new realLayout (这样); does, 它不为您提供活动布局的父相对Layout 视图。 您可以为您的父相对Layout 指定一个代号, 使用 ViewById 来控制它, 并在 Touch 旁附加您的旁听器或其它东西 。

编辑( 自从您张贴 xml 版式后)

Your parent RelativeLayout is not exposed - the whole screen is being occupied by the ScrollView, so the RelativeLayout behind it is never accessible to touch. Since you don t have any clickable view inside your inner RelativeLayout (the one inside your ScrollView), you can attach your onTouch on that.

问题回答

暂无回答




相关问题
Android - ListView fling gesture triggers context menu

I m relatively new to Android development. I m developing an app with a ListView. I ve followed the info in #1338475 and have my app recognizing the fling gesture, but after the gesture is complete, ...

AsyncTask and error handling on Android

I m converting my code from using Handler to AsyncTask. The latter is great at what it does - asynchronous updates and handling of results in the main UI thread. What s unclear to me is how to handle ...

Android intent filter for a particular file extension?

I want to be able to download a file with a particular extension from the net, and have it passed to my application to deal with it, but I haven t been able to figure out the intent filter. The ...

Android & Web: What is the equivalent style for the web?

I am quite impressed by the workflow I follow when developing Android applications: Define a layout in an xml file and then write all the code in a code-behind style. Is there an equivalent style for ...

TiledLayer equivalent in Android [duplicate]

To draw landscapes, backgrounds with patterns etc, we used TiledLayer in J2ME. Is there an android counterpart for that. Does android provide an option to set such tiled patterns in the layout XML?

Using Repo with Msysgit

When following the Android Open Source Project instructions on installing repo for use with Git, after running the repo init command, I run into this error: /c/Users/Andrew Rabon/bin/repo: line ...

Android "single top" launch mode and onNewIntent method

I read in the Android documentation that by setting my Activity s launchMode property to singleTop OR by adding the FLAG_ACTIVITY_SINGLE_TOP flag to my Intent, that calling startActivity(intent) would ...

From Web Development to Android Development

I have pretty good skills in PHP , Mysql and Javascript for a junior developer. If I wanted to try my hand as Android Development do you think I might find it tough ? Also what new languages would I ...

热门标签