У меня есть scrollView, который работает очень медленно. Внутри этого ScrollView у меня есть фрагменты с пользовательским интерфейсом. Я добавляю фрагменты с помощью FragmentTransactions. Как я могу улучшить производительность ScrollView. Я считаю, что использование фрагментов внутри ScrollView не лучший выбор? Что вы думаете.
Вот мой ScrollView в main_activity. xml
<ScrollView
android:id="@+id/scrollView"
style="@style/scrollbar_shape_style"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="15dp"
android:paddingTop="145dp"
android:scrollbarSize="10dip"
android:scrollbarTrackVertical="@android:color/white"
android:paddingEnd="25dp"
app:layout_constraintTop_toBottomOf="@id/amount"
tools:layout_editor_absoluteX="202dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="20dp"
app:layout_constraintTop_toBottomOf="@id/amount">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/first_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/second_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="120dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/third_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="240dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fourth_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="360dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fifth_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="480dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/sixth_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="600dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/seventh_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="720dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/eighth_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="840dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/ninth_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="960dp" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/tenth_business"
android:name="stoppandemic.emptymindgames.com.HospitalFragment"
android:layout_width="match_parent"
android:layout_height="283dp"
android:layout_marginTop="1080dp" />
</FrameLayout>
</ScrollView>
Вот мой FragmentClass
public class HospitalFragment extends Fragment {
public onImageClickListener mCallBack;
public final static String TAG = "ArtemyDebugger";
private int mTime;
private int mAmountOfProduction;
private int mPrice;
private int mId;
private int mMultiplier;
private int MultiplierPeople;
private View view;
OneBusinesBinding binding;
public HospitalFragment() {
}
public void setmHospital(Hospital hospital) {
this.mTime = hospital.getTime();
this.mAmountOfProduction = hospital.getAmount();
this.mPrice = hospital.getPrice();
this.mId = hospital.getId();
this.mMultiplier = hospital.getMultiplier();
this.MultiplierPeople = hospital.getMultiplierPeople();
}
public interface onImageClickListener {
void clickOnImage(int id);
void onTextViewOfPriceSelected(int id, int amountOfProduction, int price, int time, int multiplier);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mCallBack = (onImageClickListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString()
+ " must implement OnImageClickListener");
}
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(
inflater, R.layout.one_busines, container, false);
view = binding.getRoot();
binding.imageBusiness.setImageResource(AndroidImageAssets.getPictures().get(mId));
binding.amountofProduction.setText(getString(R.string.amount_of_production, mAmountOfProduction));
binding.price.setText(getString(AssetsUpgradeStrings.getStrings_On_Button_Buy().get(mId), convertNumberToString(mPrice)));
binding.progressBar.setProgressTintList(ColorStateList.valueOf(Color.GRAY));
;
binding.nameHospital.setText(AssetsUpgradeStrings.getHospitalsNames().get(mId));
binding.textViewOnProgressbar.setText(getString(R.string.string_on_progressbar, mTime));
binding.imageBusiness.setOnClickListener((v) -> {
mCallBack.clickOnImage(mId);
});
binding.price.setOnClickListener((v) -> {
if (MainActivity.mAllMoney >= mPrice) {
mAmountOfProduction++;
MainActivity.mAllMoney -= mPrice;
mPrice = (int) Math.ceil(MyConstants.getPrices().get(mId) * Math.pow(1.12, mAmountOfProduction));
mCallBack.onTextViewOfPriceSelected(mId, mAmountOfProduction, mPrice, mTime, mMultiplier);
binding.price.setText(getString(AssetsUpgradeStrings.getStrings_On_Button_Buy().get(mId), convertNumberToString(mPrice)));
binding.amountofProduction.setText(getString(R.string.amount_of_production, mAmountOfProduction));
}
});
return view;
}
Вот мой MainActivity
HospitalFragment firstHospitalFragment = new HospitalFragment();
HospitalFragment secondHospitalFragment = new HospitalFragment();
HospitalFragment thirdHospitalFragment = new HospitalFragment();
HospitalFragment fourthHospitalFragment = new HospitalFragment();
HospitalFragment fifthHospitalFragment = new HospitalFragment();
HospitalFragment sixthHospitalFragment = new HospitalFragment();
HospitalFragment seventhHospitalFragment = new HospitalFragment();
HospitalFragment eighthHospitalFragment = new HospitalFragment();
HospitalFragment ninthHospitalFragment = new HospitalFragment();
HospitalFragment tenthHospitalFragment = new HospitalFragment();
firstHospitalFragment.setmHospital(mListHospitals.get(0));
secondHospitalFragment.setmHospital(mListHospitals.get(1));
thirdHospitalFragment.setmHospital(mListHospitals.get(2));
fourthHospitalFragment.setmHospital(mListHospitals.get(3));
fifthHospitalFragment.setmHospital(mListHospitals.get(4));
sixthHospitalFragment.setmHospital(mListHospitals.get(5));
seventhHospitalFragment.setmHospital(mListHospitals.get(6));
eighthHospitalFragment.setmHospital(mListHospitals.get(7));
ninthHospitalFragment.setmHospital(mListHospitals.get(8));
tenthHospitalFragment.setmHospital(mListHospitals.get(9));
fragmentManager.beginTransaction()
.replace(R.id.first_business, firstHospitalFragment)
.replace(R.id.second_business, secondHospitalFragment)
.replace(R.id.third_business, thirdHospitalFragment)
.replace(R.id.fourth_business, fourthHospitalFragment)
.replace(R.id.fifth_business, fifthHospitalFragment)
.replace(R.id.sixth_business, sixthHospitalFragment)
.replace(R.id.seventh_business, seventhHospitalFragment)
.replace(R.id.eighth_business, eighthHospitalFragment)
.replace(R.id.ninth_business, ninthHospitalFragment)
.replace(R.id.tenth_business, tenthHospitalFragment)
.commit();