Как реализовать переключение изображения и текста при нажатии кнопки?

Я пытаюсь реализовать событие нажатия кнопки для переключения изображений в переключателе изображений вместе с обновлением строк textView при нажатии кнопки. До сих пор у меня это работало для изображения, но когда я пытался изменить метод, включив в него обновление строки я получаю следующие ошибки:

  1. При вызове getMyString я получаю следующее: Метод getMyString(int, Context) в типе AboutActivity не применим для аргументов (int).

  2. В заголовке метода getMyString это: несколько маркеров в этой строке

    • Синтаксическая ошибка на токене "(",; ожидается
    • Синтаксическая ошибка на токене ")",; ожидаемый
  3. И где я вызываю строки в переключателе это: методы Void не могут вернуть значение

    • Недопустимый модификатор для параметра getMyString; разрешен только финал

Кто-нибудь знает, где я ошибаюсь с этой реализацией? Я подумал, что, возможно, отсутствовали фигурные скобки или что код был размещен вне контекста, но из-за ошибок я вижу способ, которым я вызываю getMyString() в событии onClick.

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 ответа

Решение

1. При вызове getMyString я получаю следующее: Метод getMyString(int, Context) в типе AboutActivity не применим для аргументов (int).

У тебя есть

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

только передав его int как говорит ошибка, но их метод принимает (int, Context), Так и должно быть

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

Так что вы передаете это правильно params что метод берет.

2 В заголовке метода getMyString это: Несколько маркеров в этой строке - Синтаксическая ошибка на токене "(",; ожидается - Синтаксическая ошибка на токене ")",; ожидаемый

Похоже, ваш 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

}

Я думаю, что одна ошибка заключается в следующем: в функции onClick() вы вызываете функцию getMyString с целочисленными щелчками в качестве единственного входного параметра, в то время как в определении функции getMyString вы говорите, что функция должна получить целое число AND Приложение Context. Я бы предложил сделать вызов функции getMyString так:

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

При вызове getMyString я получаю следующее: Метод getMyString(int, Context) в типе AboutActivity не применим для аргументов (int).

Потому что у вас нет метода, который получает только целое число в качестве параметра. Ваш метод получить 2 параметра:

String getMyString(int variable, Context applicationContext)

В любом случае решение; изменить это:

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

К этому:

tView.setText(getMyString(clicks++), v.getContext());
Другие вопросы по тегам