Невозможно изменить TextView внутри пользовательского адаптера - PullRequest
0 голосов
/ 15 января 2020

хорошо, у меня есть специальный адаптер, который будет отображать упражнение, время и выбрано упражнение или нет. Когда пользователь нажимает на значок часов внутри каждого элемента в адаптере, появляется диалоговое окно, в котором пользователь может изменить время для тренировки. Как только время введено, массив, содержащий объекты типа упражнение, будет обновлен. поэтому упражнение TimeTime для этого объекта упражнений внутри списка будет обновлено. Тогда список будет refre sh и отобразится новое время упражнения. Но это не тот случай. Я могу получить время на обновление. когда я впервые создаю список упражнений, полученный из файла ресурсов string. xml, время выполнения по умолчанию составляет 30 минут. но после обновления пользователя, по-прежнему отражает время. любая помощь оценена. entry_item. xml для настраиваемого адаптера

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/backroundColor">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="3dp"
        android:layout_marginBottom="3dp">

        <ImageView
            android:id="@+id/item_icon_imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.10"
            android:src="@drawable/ic_running_exercise"/>

        <TextView
            android:id="@+id/exercise_textview"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.40"
            android:textSize="20sp"
            android:textColor="@color/textColor"
            android:text="Running"/>

        <TextView
            android:id="@+id/exercise_time_textview"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.20"
            android:textSize="18sp"
            android:textColor="@color/textColor"
            android:text="30 min"/>

        <ImageView
            android:layout_gravity="center"
            android:id="@+id/set_time_imagview"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.20"
            android:src="@drawable/ic_timer_black_24dp"/>

        <CheckBox
            android:id="@+id/exercise_checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.05"
            android:buttonTint="@color/textColor"/>
    </LinearLayout>

</RelativeLayout>

настраиваемый адаптер

public class WorkoutAdapter extends ArrayAdapter<Exercise> {

    public WorkoutAdapter(Context context, int num, ArrayList<Exercise> exerciseList) {
        super(context, 0, exerciseList);
//        allExercises = exerciseList;
    }

    @NonNull
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        // Get the data item for this position
        final Exercise exercise = getItem(position);

        // Check if an existing view is being reused, otherwise inflate the view
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.entry_item, parent, false);
        }
        // Lookup view for data population
        ImageView exerciseImageview = convertView.findViewById(R.id.item_icon_imageview);
        TextView exerciseNameTextview = convertView.findViewById(R.id.exercise_textview);
        TextView exerTimeTextview = convertView.findViewById(R.id.exercise_time_textview);
        final ImageView setTimeImageview = convertView.findViewById(R.id.set_time_imagview);
        final CheckBox exerciseCheckbox = convertView.findViewById(R.id.exercise_checkBox);

        exerciseNameTextview.setText(exercise.getExerciseName());
        exerciseImageview.setImageResource(exercise.getExerciseImage());


        //selected exercise checkbox
        exerciseCheckbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(exerciseCheckbox.isChecked()) {
                    exercise.setSelected(true);
                }
                else {
                    exercise.setSelected(false);
                }
            }
        });

        setTimeImageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setTimerDialogBox(position);
                Toast.makeText(getContext(), position+"", Toast.LENGTH_LONG).show();
            }
        });

        return convertView;
    }

    /**
     * alert dialogbox for add new item to listview
     */
    private void setTimerDialogBox(final int position) {
        // Creating alert Dialog with one Button
        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext(), R.style.dialogBox);
        alertDialog.setTitle("Set Time");
        final EditText input = new EditText(getContext());
        alertDialog.setView(input);
        alertDialog.setIcon(R.drawable.ic_timer_black_24dp1);

        alertDialog.setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,int which) {
                        long time = Long.parseLong(input.getText().toString());
                        Workout.exerciseList.get(position).setExerciseTime(time);
                        notifyDataSetChanged();
                        Toast.makeText(getContext(),"Time added", Toast.LENGTH_SHORT).show();
                    }
                }).create();

        alertDialog.setNegativeButton("CANCEL",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                }).create();
        alertDialog.show();
    }
}
...