如何在按钮点击事件上实现图像和文本切换?

时间:2013-11-12 19:39:42

标签: android onclick textview switch-statement

我正在尝试实现一个按钮点击事件来切换图像切换器中的图像,同时更新按钮点击上的textView字符串。到目前为止,我已经将它用于图像,但当我尝试将方法修改为包括更新字符串我遇到以下错误:

  1. 在getMyString调用中,我得到以下内容:AboutActivity类型中的方法getMyString(int,Context)不适用于  arguments(int)

  2. 在getMyString的方法标题处:此行的多个标记

    • 令牌上的语法错误“(”,;预期
    • 令牌上的语法错误“)”,;预期
  3. 我在这里调用字符串中的字符串:Void方法无法返回值

    • 参数getMyString的非法修饰符;唯一的决定是 允许
  4. 有没有人知道我在这个实现中出错了?我认为它可能缺少大括号或代码被置于脱离上下文之外,但从查看错误看起来似乎是我的方式m在onClick事件中调用getMyString()。

    public class AboutActivity extends Activity implements OnClickListener{
    
    
        private ImageSwitcher imageSwitcher;
        Button btnNext;
        TextView tView;
    
    
        int imageIds[]=
        {R.drawable.mark1,R.drawable.mark2,R.drawable.mark3};
        int messageCount=imageIds.length;
        // to keep current Index of ImageID array
        int currentIndex=-1;
    
        private int clicks = 1;
    
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.about);
    
            final Intent intent1=new Intent(this,AboutActivity.class);
            final Intent intent2=new Intent(this,MainActivity.class);
    
            final ViewGroup actionBarLayout = (ViewGroup) getLayoutInflater().inflate(R.layout.a,null);
    
            // get The references
            btnNext=(Button)findViewById(R.id.buttonNext);
            imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher1);
            tView = (TextView) findViewById(R.id.textView1);
            // Set the ViewFactory of the ImageSwitcher that will create ImageView object when asked
            imageSwitcher.setFactory(new ViewFactory() {
            public View makeView() {
            // TODO Auto-generated method stub
            // Create a new ImageView set it's properties
            ImageView imageView = new ImageView(getApplicationContext());
            imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            imageView.setLayoutParams(new
            ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
            return imageView;
            }
            });
    
         // Declare the animations and initialize them
            Animation in = AnimationUtils.loadAnimation(this,android.R.anim.slide_in_left);
            Animation out = AnimationUtils.loadAnimation(this,android.R.anim.slide_out_right);
            // set the animation type to imageSwitcher
            imageSwitcher.setInAnimation(in);
            imageSwitcher.setOutAnimation(out);
            // ClickListener for NEXT button
            // When clicked on Button ImageSwitcher will switch between Images
            // The current Image will go OUT and next Image will come in with specified animation
            btnNext.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            // TODO Auto-generated method stub
            currentIndex++;
            // If index reaches maximum reset it
            if(currentIndex==messageCount)
            currentIndex=0;
            imageSwitcher.setImageResource(imageIds[currentIndex]);
            tView.setText(getMyString(clicks++, v.getContext()));
            }
    
            });
    
    
            // Set up your ActionBar
            final ActionBar actionBar = getActionBar();
            actionBar.setDisplayShowHomeEnabled(false);
            actionBar.setDisplayShowTitleEnabled(false);
            actionBar.setDisplayShowCustomEnabled(true);
            actionBar.setCustomView(actionBarLayout);
    
            // You customization
            final int actionBarColor = getResources().getColor(R.color.action_bar);
            actionBar.setBackgroundDrawable(new ColorDrawable(actionBarColor));
    
            final Button actionBarHome = (Button) findViewById(R.id.action_bar_title);
            actionBarHome.setBackgroundResource(R.drawable.ic_action_back);
            actionBarHome.setOnClickListener(this);
            actionBarHome.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View view) {                
    
                   startActivity(intent2);
    
                }
    
            });
    
            final Button actionBarInfo = (Button) findViewById(R.id.action_bar_staff);
            actionBarInfo.setBackgroundResource(R.drawable.ic_action_help);
            actionBarInfo.setOnClickListener(this);
            actionBarInfo.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View view) {                
    
                   startActivity(intent1);
    
                }
    
            });
    
    
        }
    
        //method called to update textview strings.
        public String getMyString(int variable, Context applicationContext){
            switch(variable){
                case 1:
                    return applicationContext.getResources().getString(R.string.cutString);
                    break;
                case 2:
                    return applicationContext.getResources().getString(R.string.markString);
                    break;
                case 3:
                    return applicationContext.getResources().getString(R.string.measureString);
                    break;
            }
    
        }
    
    
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
    
        }
    
    
    }
    

3 个答案:

答案 0 :(得分:0)

  

1.在getMyString调用中,我得到以下内容:AboutActivity类型中的方法getMyString(int,Context)不适用于参数(int)

你有

 tView.setText(getMyString(clicks++));

只传递int,因为错误说明但是方法需要(int, Context)。所以它应该是

 tView.setText(getMyString(clicks++, v.getContext()));

这样你就可以传递方法所需的正确params

  

2A getMyString的方法头:此行的多个标记 - 令牌上的语法错误“(”,; expect - 令牌上的语法错误“),;预期

您的getMyString()方法似乎在onCreate()或其他方法中。将它移到任何方法之外。

  

3.在我调用开关中的字符串的地方:Void方法不能返回值 - 参数getMyString的非法修饰符;只允许决赛

我认为这也是由于你的方法在另一种方法中,但它的设置方式有点令人困惑。进行这些更改并再次运行,看看你得到了什么错误。

修改

您需要使用方法return String,如果cases都不是. Therefore, you can have a final,则不会返回where you return a default返回/method called to update textview strings. public String getMyString(int variable, Context applicationContext){ String text = ""; // create a String variable to return and give it whatever // value you want in case none of the cases return true switch(variable){ // assign the variable below case 1: text = applicationContext.getResources().getString(R.string.cutString); break; case 2: text = applicationContext.getResources().getString(R.string.markString); break; case 3: text = applicationContext.getResources().getString(R.string.measureString); break; } return text; //just one return } 如果不匹配,则为String`值。或者你可以做这样的事情

{{1}}

答案 1 :(得分:0)

我认为一个错误如下:在onClick()函数中,使用整数点击作为唯一的输入参数调用getMyString函数,而在getMyString函数的定义中,您说该函数必须接收一个整数和applicationContext。我建议像这样调用getMyString函数:

 tView.setText(getMyString(clicks++, getApplicationContext()));

答案 2 :(得分:0)

  

在getMyString调用中,我得到以下内容:方法   AboutActivity类型中的getMyString(int,Context)不适用   对于参数(int)

假设您没有只获取整数作为参数的方法。你的方法得到2个参数:

String getMyString(int variable, Context applicationContext)

无论如何解决方案;改变这个:

tView.setText(getMyString(clicks++));

对此:

tView.setText(getMyString(clicks++), v.getContext());