我目前正在开发类似测验的应用程序。
在这个应用程序中,我有一个名为QuizActivity的活动。
在QuizActivity中,我想一个接一个地显示问题,并允许用户在它们之间导航。 所以我考虑建立一个问题片段。
在布局中,我插入了组件以显示问题(Cardviews,EditTexts和一个ImageView)。 在代码中,我在创建视图时将数据加载到视图中。
当用户尝试非常快地切换片段时,问题就出现了,输入开始变慢,一切都开始滞后。
这是我的代码:
片段布局
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/question_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="centerCrop" />
<AutoCompleteTextView
android:id="@+id/AutoreTxtView"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:fontFamily="sans-serif"
android:hint="Autore"
android:paddingLeft="15dp"
android:paddingRight="15dp" />
<AutoCompleteTextView
android:id="@+id/OperaTxtView"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:fontFamily="sans-serif"
android:hint="Opera"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:singleLine="true" />
<AutoCompleteTextView
android:id="@+id/LuogoTxtView"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:fontFamily="sans-serif"
android:hint="Luogo"
android:paddingLeft="15dp"
android:paddingRight="15dp" />
<AutoCompleteTextView
android:id="@+id/AnnoTxtView"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:fontFamily="sans-serif"
android:hint="Anno"
android:paddingLeft="15dp"
android:paddingRight="15dp" />
<AutoCompleteTextView
android:id="@+id/MovimentoTxtView"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:hint="Movimento"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:layout_marginBottom="8dp"/>
</LinearLayout>
</android.support.v7.widget.CardView>
片段代码
public class Question extends Fragment {
Risposta risposta;
public Question() {
// Required empty public constructor
}
public static Question newInstance(Risposta risposta) {
Question fragment = new Question();
Bundle args = new Bundle();
args.putString("Key",risposta.getKey());
args.putString("Opera",risposta.getOpera());
args.putString("Autore",risposta.getAutore());
args.putString("Anno_Inizio",risposta.getAnno_inizio());
args.putString("Anno_Fine",risposta.getAnno_fine());
args.putString("Movimento",risposta.getMovimento());
args.putString("Luogo",risposta.getLuogo());
args.putByteArray("Foto",risposta.getFoto());
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
risposta = new Risposta(getArguments().getString("Opera"),
getArguments().getString("Autore"),
getArguments().getString("Anno_Inizio"),
getArguments().getString("Anno_Fine"),
getArguments().getString("Luogo"),
getArguments().getString("Movimento"));
risposta.setFoto(getArguments().getByteArray("Foto"));
risposta.setKey(getArguments().getString("Key"));
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.prova, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//final CardView card = view.findViewById(R.id.question_img_card);
ImageView img = view.findViewById(R.id.question_img);
Bitmap bmp = BitmapFactory.decodeByteArray(risposta.getFoto(), 0, risposta.getFoto().length);
img.setImageBitmap(bmp);
EditText Autore = view.findViewById(R.id.AutoreTxtView);
EditText Opera = view.findViewById(R.id.OperaTxtView);
EditText Anno = view.findViewById(R.id.AnnoTxtView);
EditText Movimento = view.findViewById(R.id.MovimentoTxtView);
EditText Luogo = view.findViewById(R.id.LuogoTxtView);
Autore.setText(risposta.getAutore());
Opera.setText(risposta.getOpera());
Anno.setText(risposta.getAnno_fine());
Movimento.setText(risposta.getMovimento());
Luogo.setText(risposta.getLuogo());
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
NextFragment代码
mFragmentManger.beginTransaction()
.replace(R.id.FragContainer, listaIstanzeQuestion.get(question_index))
.addToBackStack("key_" + question_index)
.commit();
简单的PopBackStack()返回上一个片段
mFragmentManger.popBackStack();
有没有更有效的方法来获得我正在寻找的结果? 我已经尝试清理代码并减少布局组件。如果我删除一些布局组件,性能会提高,但我需要它们。
感谢。