Android - 如何访问onTouch方法中的变量以在ViewFlipper中使用

时间:2012-03-15 00:40:54

标签: android viewflipper ontouchevent

我在循环中有一个变量,每当我触摸按钮时我都会改变。我在活动的最后需要这个变量来设置我的viewflipper的哪个视图要显示。整个事情开始是因为我不断在一个不同方法中定义的内部类中的'非final变量'错误。所以我在这里看并按照一些人的建议 - 做一个局部最终变量然后在onTouch方法中重新分配。请参阅以下代码:

for(int categoryIndex = 0; categoryIndex <menuCategories.size(); categoryIndex++){

        final CustomButton menuButton = new CustomButton(this);
        menuButton.setId(ViewIdentification.getId());
        menuButton.setText(menuCategories.get(categoryIndex).category_name);
        menuButton.setTextColor(Color.argb(255, 77, 30, 16));
        menuButton.setTextSize(35);
        menuButton.setGravity(Gravity.CENTER);
        menuButton.setTypeface(tf);
        menuButton.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        menuButton.setPadding(10, 10, 10, 10);

        sideMenu.addView(menuButton);

        final int currentCategoryIndex = categoryIndex;
        menuButton.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                myCurrentCategory = currentCategoryIndex;
                Log.d("Touched Side Menu button ", menuButton.getId() + ": " + menuButton.getText().toString());
                Log.d("My Current Category is ", Integer.valueOf(myCurrentCategory).toString());


                return false;
            }
        });
........
.......
.......building more stuff within this loop 

在这个循环中,我正在构建一个包含许多RelativeViews的LinearViews数组(当然其中包含任意数量的视图)。由于我拥有所有这些LinearViews,我创建了一个viewflipper来添加所有这些线性视图,然后取决于myCurrentCategory将是我设置我的鳍状肢的内容。请参阅下面的代码:

    ViewFlipper flipper = new ViewFlipper(this);
    RelativeLayout.LayoutParams viewFlipperLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,  LayoutParams.WRAP_CONTENT);
    viewFlipperLayoutParams.addRule(RelativeLayout.RIGHT_OF, sideMenu.getId());
    viewFlipperLayoutParams.setMargins(0, 0, 100, 0);
    //subMenuLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, screenLayout.getId());
    flipper.setLayoutParams(viewFlipperLayoutParams);

    for(int flipperIndex = 0; flipperIndex < subMenuLinearLayouts.size(); flipperIndex++){
        flipper.addView(subMenuLinearLayouts.get(flipperIndex));
    }

    //set which part of the menu we want to see
    flipper.setDisplayedChild(myCurrentCategory);

一个subMenuLinearLayout是一个带有相对布局的LinearLayout,其中包含具有其他视图的relativelayouts(正如我之前解释过但想要清楚)。

请注意,我已将myCurrentCategory定义在程序的顶部,因此它是全局定义的。当我将其设置为已知状态0,1,2,3,4,5时,ViewFlipper正确地向我显示正确的LinearLayout ...所以我知道这是有效的。但是在onTouch方法中,我根据categoryIndex为myCurrentCategory分配一个新值,ViewFlipper不会翻转到该视图。我的日志语句显示有问题的myCurrentCategory变量甚至得到了正确的值。我刚试过它。所以它归结为为什么ViewFlipper没有“看到”变量的变化?谢谢!

1 个答案:

答案 0 :(得分:1)

您应该在onTouch的日志消息中获得正确的输出。但是你的ViewFlipper应该如何知道你刚刚更改了变量的内容(onTouch将来会在某个随机点发生)?

您需要在onTouch(例如flipper.setDisplayedChild)中调用某种方法来查看内容。

  

所以归结为为什么ViewFlipper没有“看到”变量的变化?谢谢!

Java / ViewFlipper不会因为您在某个时候使用该变量而监视变量。事实上,代码甚至不知道你使用了什么变量。它只是获得了新的价值。