0

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

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

  2. 在 getMyString 的方法头 this: Multiple markers at this line

    • 令牌“(”,;预期的语法错误
    • 标记 ")" 的语法错误,;预期的
  3. 我在开关中调用字符串的地方是:Void methods cannot return a value

    • 参数 getMyString 的非法修饰符;只允许final

有谁知道我在这个实现中哪里出错了?我认为它可能缺少大括号或者代码被置于上下文之外,但从查看错误来看,这似乎是我调用的方式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

    }


}
4

3 回答 3

0

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

你有

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

只将它传递int给错误所说的,但他们的方法需要(int, Context). 所以应该是

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

这样您就可以正确地传递params该方法所采用的方法。

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

看起来您的getMyString()方法在内部onCreate()或其他方法中。将其移到任何方法之外。

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

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

编辑

您需要方法returna ,如果没有一个为真返回String` 值,String则它现在不会返回一个,以防它们不匹配。或者你可以做这样的事情cases. Therefore, you can have a finalwhere 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

}
于 2013-11-12T19:52:13.043 回答
0

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

 tView.setText(getMyString(clicks++, getApplicationContext()));
于 2013-11-12T19:52:38.257 回答
0

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

因为您没有仅获取整数作为参数的方法。您的方法获得 2 个参数:

String getMyString(int variable, Context applicationContext)

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

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

对此:

tView.setText(getMyString(clicks++), v.getContext());
于 2013-11-12T19:56:23.553 回答