我在循环中有一个变量,每当我触摸按钮时我都会改变。我在活动的最后需要这个变量来设置我的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没有“看到”变量的变化?谢谢!
答案 0 :(得分:1)
您应该在onTouch
的日志消息中获得正确的输出。但是你的ViewFlipper应该如何知道你刚刚更改了变量的内容(onTouch将来会在某个随机点发生)?
您需要在onTouch
(例如flipper.setDisplayedChild
)中调用某种方法来查看内容。
所以归结为为什么ViewFlipper没有“看到”变量的变化?谢谢!
Java / ViewFlipper不会因为您在某个时候使用该变量而监视变量。事实上,代码甚至不知道你使用了什么变量。它只是获得了新的价值。