Как реализовать переключение изображения и текста при нажатии кнопки?
Я пытаюсь реализовать событие нажатия кнопки для переключения изображений в переключателе изображений вместе с обновлением строк textView при нажатии кнопки. До сих пор у меня это работало для изображения, но когда я пытался изменить метод, включив в него обновление строки я получаю следующие ошибки:
При вызове getMyString я получаю следующее: Метод getMyString(int, Context) в типе AboutActivity не применим для аргументов (int).
В заголовке метода getMyString это: несколько маркеров в этой строке
- Синтаксическая ошибка на токене "(",; ожидается
- Синтаксическая ошибка на токене ")",; ожидаемый
И где я вызываю строки в переключателе это: методы 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());