我正在使用记录触摸的 touchevent listner,并且我已经使用 viewpager 进行 swping.. 我们知道 java 的缺点是按值传递,我仍在尝试在匿名内部类中传递 boolean 值。在 switch stmt 中更改的值不会在 switch stmt 之外持久存在。 flag2 值。有人对此有解决方案吗?我的代码如下
parent.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//flag2=!flag2;
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
awesomePager.requestDisallowInterceptTouchEvent(true);
//flag2=false;
break;
case MotionEvent.ACTION_UP:
awesomePager.requestDisallowInterceptTouchEvent(true);
if(flag)
{
upperdock.setClickable(false);
upperdock.bringToFront();
tocparent.bringToFront();
tocbottom.bringToFront();
upperdock.setVisibility(RelativeLayout.VISIBLE);
tocparent.setVisibility(LinearLayout.VISIBLE);
tocbottom.setVisibility(LinearLayout.VISIBLE);
flag=false;
// obj.one(event.getAction());
}
else
{
parent.bringToFront();
upperdock.setVisibility(RelativeLayout.INVISIBLE);
tocparent.setVisibility(LinearLayout.INVISIBLE);
tocbottom.setVisibility(LinearLayout.INVISIBLE);
flag=true;
//obj.one(event.getAction());
}
flag2=true;
break;
case MotionEvent.ACTION_CANCEL:
awesomePager.requestDisallowInterceptTouchEvent(false);
flag2=false;
break;
}
return flag2;
}
});
public class SimpleViewPagerforAndroidActivity extends Activity { /** Called when the activity is first created. */ boolean flag2=true; //rest of the code }
请帮忙...需要它...
package com.beanie.samples.viewpager;
//set of imports
public class SimpleViewPagerforAndroidActivity extends Activity {
/** Called when the activity is first created. */
volatile boolean flag2=true;
AwesomePagerAdapter awe1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
cxt = this;
data = new ArrayList<WebView>();
awesomePager = (ViewPager) findViewById(R.id.viewPager);
awesomePager.setAdapter(new AwesomePagerAdapter(this,data));
Bundle extras = getIntent().getExtras();
Boolean dock2checked = extras.getBoolean("dock1");
if(dock2checked)
{
Toast toast1 = Toast.makeText(getBaseContext(), Boolean.toString(dock2checked), 5000);
toast1.show();
}
else
{
Toast toast1 = Toast.makeText(getBaseContext(), Boolean.toString(dock2checked), 5000);
toast1.show();
}
awesomePager.setOffscreenPageLimit(11);
//
web0 = new WebView(cxt);
web0.loadUrl("file:///android_asset/1/01-Cover.html");
WebSettings webSettings0 = web0.getSettings();
webSettings0.setJavaScriptEnabled(true);
web1 = new WebView(cxt);
web1.loadUrl("file:///android_asset/1/01-Cover.html");
WebSettings webSettings1 = web1.getSettings();
webSettings1.setJavaScriptEnabled(true);
web2 = new WebView(cxt);
web2.loadUrl("file:///android_asset/5/05-01.html");
WebSettings webSettings2 = web2.getSettings();
webSettings2.setJavaScriptEnabled(true);
web3 = new WebView(cxt);
web3.loadUrl("file:///android_asset/1/01-Cover.html");
WebSettings webSettings3 = web3.getSettings();
webSettings3.setJavaScriptEnabled(true);
web4 = new WebView(cxt);
web4.loadUrl("file:///android_asset/5/05-01.html");
WebSettings webSettings4 = web4.getSettings();
webSettings4.setJavaScriptEnabled(true);
web5 = new WebView(cxt);
web5.loadUrl("file:///android_asset/1/01-Cover.html");
WebSettings webSettings5 = web5.getSettings();
webSettings5.setJavaScriptEnabled(true);
web6 = new WebView(cxt);
web6.loadUrl("file:///android_asset/5/05-01.html");
WebSettings webSettings6 = web6.getSettings();
webSettings6.setJavaScriptEnabled(true);
web7 = new WebView(cxt);
web7.loadUrl("file:///android_asset/1/01-Cover.html");
WebSettings webSettings7 = web7.getSettings();
webSettings7.setJavaScriptEnabled(true);
web8 = new WebView(cxt);
web8.loadUrl("file:///android_asset/5/05-01.html");
WebSettings webSettings8 = web8.getSettings();
webSettings8.setJavaScriptEnabled(true);
web9 = new WebView(cxt);
web9.loadUrl("file:///android_asset/1/01-Cover.html");
WebSettings webSettings9 = web9.getSettings();
webSettings9.setJavaScriptEnabled(true);
web10 = new WebView(cxt);
web10.loadUrl("file:///android_asset/5/05-01.html");
WebSettings webSettings10 = web10.getSettings();
webSettings10.setJavaScriptEnabled(true);
data.add(web0);
data.add(web1);
data.add(web2);
data.add(web3);
data.add(web4);
data.add(web5);
data.add(web6);
data.add(web7);
data.add(web8);
data.add(web9);
data.add(web10);
tocparent=(LinearLayout) findViewById(R.id.tocparent);
dock2=(Button)findViewById(R.id.button1);
//dock2.setVisibility(Button.INVISIBLE);
tocparent.setVisibility(LinearLayout.INVISIBLE);
topmost=(RelativeLayout) findViewById(R.id.topmost);
parent=(RelativeLayout) findViewById(R.id.rl1);
upperdock=(RelativeLayout) findViewById(R.id.upperdock);
tocparent=(LinearLayout) findViewById(R.id.tocparent);
tocbottom=(LinearLayout) findViewById(R.id.linearLayout3);
upperdock.setVisibility(RelativeLayout.INVISIBLE);
tocparent.setVisibility(LinearLayout.INVISIBLE);
tocbottom.setVisibility(LinearLayout.INVISIBLE);
web0.loadUrl("javascript:fhhf()");
parent.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//flag2=!flag2;
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
awesomePager.requestDisallowInterceptTouchEvent(true);
//flag2=false;
break;
case MotionEvent.ACTION_UP:
awesomePager.requestDisallowInterceptTouchEvent(true);
if(flag)
{
upperdock.setClickable(false);
upperdock.bringToFront();
tocparent.bringToFront();
tocbottom.bringToFront();
upperdock.setVisibility(RelativeLayout.VISIBLE);
tocparent.setVisibility(LinearLayout.VISIBLE);
tocbottom.setVisibility(LinearLayout.VISIBLE);
flag=false;
// obj.one(event.getAction());
}
else
{
parent.bringToFront();
upperdock.setVisibility(RelativeLayout.INVISIBLE);
tocparent.setVisibility(LinearLayout.INVISIBLE);
tocbottom.setVisibility(LinearLayout.INVISIBLE);
flag=true;
//obj.one(event.getAction());
}
flag2=true;
break;
case MotionEvent.ACTION_CANCEL:
awesomePager.requestDisallowInterceptTouchEvent(false);
flag2=false;
//Toast.makeText(getApplicationContext(), s, 220).show();
//obj.one(event.getAction());
break;
}
/* if(event.getAction()==MotionEvent.ACTION_UP)
{
flag2=true;
}
else if(event.getAction()==MotionEvent.ACTION_CANCEL)
{
flag2=false;
}*/
return flag2;
}
});
awesomePager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageSelected(int arg0) {
//Toast toast1 = Toast.makeText(getBaseContext(), "PageSelected"+ arg0, 5000);
//Toast1.show();
if(arg0==0)
{
//web0.loadUrl("javascript:fhhf()");
// awesomePager.getChildAt(arg0 - 1);
web0.loadUrl("javascript:fhhf1()");
web0.loadUrl("javascript:fhhf()");
}
else if(arg0==1)
{
web1.loadUrl("javascript:fhhf1()");
web1.loadUrl("javascript:fhhf()");
}
else if(arg0==3)
{
web3.loadUrl("javascript:fhhf1()");
//Toast toast2 = Toast.makeText(getBaseContext(), "fun"+ arg0, 5000);
//Toast2.show();
}
else if(arg0==5)
web5.loadUrl("javascript:fhhf()");
else if(arg0==7)
web7.loadUrl("javascript:fhhf()");
else if(arg0==9)
web9.loadUrl("javascript:fhhf()");
}
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
int o = awesomePager.getCurrentItem();
WebView temp = (WebView) awesomePager.getChildAt(o);
if(arg0 == 1)
{
temp.loadUrl("javascript:fhhf1()");
}
else if(arg0 == 0)
{
temp.loadUrl("javascript:fhhf()");
}
}
});
}
public boolean fun1()
{
return true;
}
public boolean fun2()
{
return false;
}
private class AwesomePagerAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener {
private List<WebView> data;
private Context ctx1;
public AwesomePagerAdapter(Context ctx, List<WebView> data) {
this.ctx1 = ctx;
this.data = data;
}
@Override
public int getCount() {
return NUM_AWESOME_VIEWS;
}
@Override
public Object instantiateItem(View collection, int position) {
data.get(position).setBackgroundColor(R.color.black);
return data.get(position);
}
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((WebView) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==((WebView)object);
}
@Override
public void finishUpdate(View arg0) {
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {}
public void onPageScrollStateChanged(int position) {
}
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
public void onPageSelected(int position) {
}
}
}
提前致谢
最佳答案
首先在 SimpleViewPagerforAndroidActivity 中创建一个方法,如下所示,如果您不想返回任何内容,您也可以使用 void
boolean method(Boolean flag){
flag2=flag;
return flag2;
}
在其他类中创建一个对象,如下所示
SimpleViewPagerforAndroidActivity abc=new SimpleViewPagerforAndroidActivity();
并在ontouch事件中通过switch语句调用方法
abc.method(false or true);
这将更新你的 flag2 并且你可以通过在 Log by 中打印来检查
Log.d("flag2",""+abc.flag2);
关于java - 不能通过引用传递 android 中的 boolean 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10848712/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr