Я предполагаю, что эта функция существует в вашем классе Activity
, и вы хотели бы обработать некоторую информацию, основанную на View
. Это можно решить двумя способами:
- Удалите модификатор stati c и позвольте экземпляру позаботиться об этом.
- Создайте поле, содержащее ссылку
View
, которая создается сразу после установки макета.
Таким образом, Activity
будет содержать поле:
class MyActivity extends Activity {
static View FinalBuy; // needs to be static, otherwise would give same error
}
@Override
void onCreate(Bundle savedInstance) {
// after setLayout
FinalBuy = (TextView) findViewById(R.id.buyText);
}
Но чтобы сохранить ваш код от потенциальной ошибки времени выполнения, используйте блок if...else
в вашем методе stati c:
public static void culculateFprice(){
if(FinalBuy != null) {
// your code here.
}
}
Эта проблема является основной c Java а не Android. Таким образом, язык Java предназначен для обеспечения методов экземпляра и статуса c для программ.
Эта декларация static View
приводит к потенциальной уязвимости проекта, поскольку эта View
переживет действие. Вместо этого вам следует рассмотреть возможность использования подхода, предложенного в списке в качестве варианта 1, и понять, почему вы не можете использовать метод экземпляра в своей программе. Вы должны прочитать больше на этой теме .
Скорее всего, вам потребуется изменить другие поля MainActivity
, чтобы они также были объявлены как non-stati c!