имеется следующий вопрос. Учу андроид программирование по книге, и там встретил следующий код:
MainActivity.java:
package asus.example.com.workout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WorkoutDetailFragment frag = (WorkoutDetailFragment) getFragmentManager().findFragmentById(R.id.detail_frag);
frag.setWorkout(1);
}
}
Workout.java:
package asus.example.com.workout;
public class Workout {
public String name;
public String description;
public static final Workout[] workout = {
new Workout("The Limb Loosener",
"5 Handstand push-ups\n10 1-legged squats\n15 Pull-ups"),
new Workout("Core Agony",
"100 Pull-ups\n100 Push-ups\n100 Sit-ups\n100 Squats"),
new Workout("The Wimp Special",
"5 Pull-ups\n10 Push-ups\n15 Squats"),
new Workout("Strength and Length",
"500 meter run\n21 x 1.5 pood kettleball swing\n21 x pull-ups")
};
private Workout(String name, String description){
this.name = name;
this.description = description;
}
public String getName() {
return this.name;
}
public String getDescription() {
return this.description;
}
}
WorkoutDetailFragment.java:
package asus.example.com.workout;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A simple {@link Fragment} subclass.
*/
public class WorkoutDetailFragment extends Fragment {
private long workoutId;
public WorkoutDetailFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_workout_detail, container, false);
}
public void setWorkout(long workoutId) {
this.workoutId = workoutId;
}
}
Однако этот код выбивает ошибку:
error: incompatible types: Fragment cannot be converted to WorkoutDetailFragment
На строке
WorkoutDetailFragment frag = (WorkoutDetailFragment) getFragmentManager().findFragmentById(R.id.detail_frag);
Не понимаю, в чем ошибка, вроде же есть приведение типов. В чем проблема и как исправить?
Попробуйте:
WorkoutDetailFragment frag = (WorkoutDetailFragment) getSupportFragmentManager().findFragmentById(R.id.detail_frag);
getFragmentMangager() возвращает android.app.Fragment класс, а у вас WorkoutDetailFragment наследуется от android.support.v4.app.Fragment.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей