Я пытаюсь использовать findViewById
, чтобы иметь возможность определить представление и макет в моем классе. Как было предложено в Интернете, я создал контекст активности, но он по-прежнему возвращает объект как null. Я все еще новичок в кодировании, поэтому, пожалуйста, потерпите меня.
Вот мой класс:
public class team{
//defining activity class to use
Activity activity;
Context context;
//definging text box
LinearLayout lay = activity.findViewById(R.id.Scontainer);
View Tbox = activity.getLayoutInflater().inflate(R.layout.text_box_output, null);
//mebers Deffing
String teamname;
String teacher;
ArrayList<Players> members = new ArrayList<Players>();
public team(Context context, Activity activity, String teamname,String teacher) {
//to be able to use activity
this.context=context;
this.activity=activity;
//normal things to define
this.teamname = teamname;
this.teacher= teacher;
}
//mainactivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sports_screen);
Activity act= this;
//creating the list that is on screen
FloatingActionButton addClass = findViewById(R.id.Add_class_button);
// input
addClass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
team sportsteam = new team(MainActivity.this,act,"","");
sportsteam.addtext();
}
});
}
}
`
Похоже, проблема в том, что переменная активности в классе вашей команды не инициализирована, и поэтому activity.findViewById
и activity.getLayoutInflater()
возвращают значение null.
Чтобы решить эту проблему, вы можете передать экземпляр Activity классу команды в конструкторе, а затем использовать этот экземпляр для вызова findViewById
и getLayoutInflater
.
Вот обновленная версия вашего кода:
// My class
public class team {
// Defining Activity class to use
private Activity activity;
// Defining text box
LinearLayout lay;
View Tbox;
// Members Defining
String teamname;
String teacher;
ArrayList<Players> members = new ArrayList<Players>();
public team(Activity activity, String teamname, String teacher) {
// To be able to use activity
this.activity = activity;
// Normal things to define
this.teamname = teamname;
this.teacher = teacher;
// initialize the lay and Tbox variables
lay = activity.findViewById(R.id.Scontainer);
Tbox = activity.getLayoutInflater().inflate(R.layout.text_box_output, null);
}
public void addtext() {
// add text to the layout and view
}
}
// MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sports_screen);
// Creating the list that is on screen
FloatingActionButton addClass = findViewById(R.id.Add_class_button);
// Input
addClass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
team sportsteam = new team(MainActivity.this, "", "");
sportsteam.addtext();
}
});
}
}