ImageButton 在使用 1 次后停止工作 Android

ImageButton stops working after 1 use Android

所以听我说完,我使用了一个按钮来打开一个 activity,它生成一个项目,然后返回到原始片段并显示在回收视图中......但是一旦我尝试添加第二个项目,ImageButton 根本不允许我再次访问生成 activity 的项目,几乎就像 ImageButton 被停用一样(我尝试使用 setEnabled 和 setClickable 但它不会修复它),尽快我使用 Button 而不是 ImageButton,它工作得很好,但我无法按照我的意愿自定义它的外观。 以下是一些图片和代码:

profile_fragment.java

public class profile_fragment extends Fragment implements ExerciseRecyclerAdapterFinal.OnItemListener, Serializable {

    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    public ArrayList<ExerciseItemFinal> listExercises = new ArrayList<>();

    public RecyclerView rv;

    private String mParam1;
    private String mParam2;

    public ExerciseItemFinal item;

    public int contadorDias;

    public TextView dateView;

    public ImageView rightButton;
    public ImageView leftButton;

    public ImageButton addButtonCircle;

    public String date;

    public Calendar calendar;

    ActivityResultLauncher<Intent> activityLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {

                    if (result.getResultCode() == 111) {
                        Intent intent = result.getData();

                        if (intent != null) {
                            item = (ExerciseItemFinal) intent.getSerializableExtra("lol");
                            addItem(item);
                            updateRecyclerView();
                            addButtonCircle.setEnabled(true);
                            }
                        }
                    }
                }

    );

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);

        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        contadorDias = 0;

        calendar = Calendar.getInstance();
        date = DateFormat.getDateInstance(DateFormat.SHORT).format(calendar.getTime());

        View view = inflater.inflate(R.layout.fragment_profile_fragment, container, false);

        dateView = (TextView) view.findViewById(R.id.date_text_2);
        rightButton = (ImageView) view.findViewById(R.id.right_button_2);
        leftButton = (ImageView) view.findViewById(R.id.left_button_2);
        addButtonCircle = (ImageButton) view.findViewById(R.id.add_button_circle);

        rv = view.findViewById(R.id.recyclerViewExercises123);

        dateView.setText("Today");

        addButtonCircle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(getActivity(), ExerciseCategoryChooser.class);
                activityLauncher.launch(i);
            }
        });

        rightButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                calendar.add(Calendar.DATE, 1);
                contadorDias++;
                date = DateFormat.getDateInstance(DateFormat.SHORT).format(calendar.getTime());
                dateView.setText(setDay(contadorDias, date));
            }
        });

        leftButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                calendar.add(Calendar.DATE, -1);
                contadorDias--;
                date = DateFormat.getDateInstance(DateFormat.SHORT).format(calendar.getTime());
                dateView.setText(setDay(contadorDias, date));
            }
        });

        return view;
    }

    private void updateRecyclerView() {

        ExerciseRecyclerAdapterFinal adapter = new ExerciseRecyclerAdapterFinal(getContext(), listExercises, this);
        rv.setAdapter(adapter);
        rv.setLayoutManager(new LinearLayoutManager(getContext()));

    }

    private void addItem(ExerciseItemFinal item) {

        listExercises.add(item);

    }

    private String setDay(int cont, String dateNew) {

        if (cont == 0) {
            return "Today";
        } else if (cont == 1){
            return "Tomorrow";
        } else if (cont == -1){
            return "Yesterday";
        } else {
            return dateNew;
        }

    }


    @Override
    public void onItemListener(int position) {

    }
}

ExerciseCategoryChooser.java

public class ExerciseCategoryChooser extends AppCompatActivity implements Serializable, ExerciseRecyclerAdapter.onItemClick, ExerciseRecyclerAdapter1.OnItemListener{

    public ImageView backArrow;
    public ImageView addButton;

    public int selection;

    public RecyclerView rv;

    public ExerciseItemFinal item;

    public ExerciseItem item1;
    public CategoryItem item2;

    public ArrayList<CategoryItem> categories = new ArrayList<>(); String [] categoriesArray;
    public ArrayList<ExerciseItem> absItems = new ArrayList<>(); String [] absArray;
    public ArrayList<ExerciseItem> backItems = new ArrayList<>(); String [] backArray;
    public ArrayList<ExerciseItem> bicepsItems = new ArrayList<>(); String [] bicepsArray;
    public ArrayList<ExerciseItem> cardioItems = new ArrayList<>(); String [] cardioArray;
    public ArrayList<ExerciseItem> chestItems = new ArrayList<>(); String [] chestArray;
    public ArrayList<ExerciseItem> legsItems = new ArrayList<>(); String [] legsArray;
    public ArrayList<ExerciseItem> shouldersItems = new ArrayList<>(); String [] shouldersArray;
    public ArrayList<ExerciseItem> tricepsItems = new ArrayList<>(); String [] tricepsArray;

    ActivityResultLauncher<Intent> activityLauncher2 = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {

                    if (result.getResultCode() == 011) {
                        Intent intent = result.getData();

                        if (intent != null) {
                            item = (ExerciseItemFinal) intent.getSerializableExtra("code123");
                            finished();
                        }
                    }
                }
            }
    );

    private void finished() {

        Intent i = new Intent();
        i.putExtra("lol", item);
        setResult(111, i);
        finish();

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exercise_category_chooser);

        backArrow = findViewById(R.id.arrow_exercises);
        addButton = findViewById(R.id.add_button_exercises);

        rv = findViewById(R.id.recyclerViewExercise);

        categoriesArray = getResources().getStringArray(R.array.categoriesExercises);
        absArray = getResources().getStringArray(R.array.absExercises);
        backArray = getResources().getStringArray(R.array.backExercises);
        bicepsArray = getResources().getStringArray(R.array.bicepsExercises);
        cardioArray = getResources().getStringArray(R.array.cardioExercises);
        chestArray = getResources().getStringArray(R.array.chestExercises);
        legsArray = getResources().getStringArray(R.array.legsExercises);
        shouldersArray = getResources().getStringArray(R.array.shouldersExercises);
        tricepsArray = getResources().getStringArray(R.array.tricepsExercises);

        selection = 0;

        Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show();

        insertAllItems(selection);

        ActivityResultLauncher<Intent> activityLauncher = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                new ActivityResultCallback<ActivityResult>() {
                    @Override
                    public void onActivityResult(ActivityResult result) {

                        if (result.getResultCode() == 7171) {
                            Intent intent = result.getData();

                            if (intent != null) {

                            }
                        }
                    }
                }
        );


        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ExerciseCategoryChooser.this, AddExercise.class);
                activityLauncher.launch(intent);
            }
        });

        backArrow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setResult(892, null);
                finish();
            }
        });

    }

    public void insertAllItems(int s) {
        switch(s) {
            case 1:
                for (int l = 0; l < absArray.length; l++) {
                    ExerciseItem i1 = new ExerciseItem(absArray[l], "Back", "Weight and Reps");
                    absItems.add(i1);
                }

                ExerciseRecyclerAdapter1 adapter1 = new ExerciseRecyclerAdapter1(getApplicationContext(), item1 , absItems, this::onItemClick);
                rv.setAdapter(adapter1);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

                break;
            case 2:
                for (int l = 0; l < backArray.length; l++) {
                    ExerciseItem i2 = new ExerciseItem(backArray[l], "Back", "Weight and Reps");
                    backItems.add(i2);
                }

                ExerciseRecyclerAdapter1 adapter2 = new ExerciseRecyclerAdapter1(getApplicationContext(), item1 , backItems, this::onItemClick);
                rv.setAdapter(adapter2);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

                break;
            case 3:
                for (int l = 0; l < bicepsArray.length; l++) {
                    ExerciseItem i3 = new ExerciseItem(bicepsArray[l], "Biceps", "Weight and Reps");
                    bicepsItems.add(i3);
                }

                ExerciseRecyclerAdapter1 adapter3 = new ExerciseRecyclerAdapter1(getApplicationContext(), item1 , bicepsItems, this::onItemClick);
                rv.setAdapter(adapter3);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

                break;
            case 4:
                for (int l = 0; l < cardioArray.length; l++) {
                    ExerciseItem i4 = new ExerciseItem(cardioArray[l], "Cardio", "Weight and Reps");
                    cardioItems.add(i4);
                }

                ExerciseRecyclerAdapter1 adapter4 = new ExerciseRecyclerAdapter1(getApplicationContext(), item1 , cardioItems, this::onItemClick);
                rv.setAdapter(adapter4);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

                break;
            case 5:
                for (int l = 0; l < chestArray.length; l++) {
                    ExerciseItem i5 = new ExerciseItem(chestArray[l], "Chest", "Weight and Reps");
                    chestItems.add(i5);
                }

                ExerciseRecyclerAdapter1 adapter5 = new ExerciseRecyclerAdapter1(getApplicationContext(), item1 , chestItems, this::onItemClick);
                rv.setAdapter(adapter5);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

                break;
            case 6:
                for (int l = 0; l < legsArray.length; l++) {
                    ExerciseItem i6 = new ExerciseItem(legsArray[l], "Legs", "Weight and Reps");
                    legsItems.add(i6);
                }

                ExerciseRecyclerAdapter1 adapter6 = new ExerciseRecyclerAdapter1(getApplicationContext(), item1 , legsItems, this::onItemClick);
                rv.setAdapter(adapter6);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

                break;
            case 7:
                for (int l = 0; l < shouldersArray.length; l++) {
                    ExerciseItem i7 = new ExerciseItem(shouldersArray[l], "Shoulders", "Weight and Reps");
                    shouldersItems.add(i7);
                }

                ExerciseRecyclerAdapter1 adapter7 = new ExerciseRecyclerAdapter1(getApplicationContext(), item1 , shouldersItems, this::onItemClick);
                rv.setAdapter(adapter7);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

                break;
            case 8:
                for (int l = 0; l < tricepsArray.length; l++) {
                    ExerciseItem i8 = new ExerciseItem(tricepsArray[l], "Triceps", "Weight and Reps");
                    tricepsItems.add(i8);
                }

                ExerciseRecyclerAdapter1 adapter8 = new ExerciseRecyclerAdapter1(getApplicationContext(), item1 , tricepsItems, this::onItemClick);
                rv.setAdapter(adapter8);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

                break;

            default:
                for (int l = 0; l < categoriesArray.length; l++) {
                    CategoryItem categoryItem = new CategoryItem(categoriesArray[l]);
                    categories.add(categoryItem);
                }

                ExerciseRecyclerAdapter adapter = new ExerciseRecyclerAdapter(getApplicationContext(), item2 , categories, this::onItemListener);
                rv.setAdapter(adapter);
                rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        }
    }

    @Override
    public void onItemListener(int position) {
        switch (position) {
            case 0:
                selection = 1;
                insertAllItems(selection);
                break;
            case 1:
                selection = 2;
                insertAllItems(selection);
                break;
            case 2:
                selection = 3;
                insertAllItems(selection);
                break;
            case 3:
                selection = 4;
                insertAllItems(selection);
                break;
            case 4:
                selection = 5;
                insertAllItems(selection);
                break;
            case 5:
                selection = 6;
                insertAllItems(selection);
                break;
            case 6:
                selection = 7;
                insertAllItems(selection);
                break;
            case 7:
                selection = 8;
                insertAllItems(selection);
                break;

            default:

        }
    }

    @Override
    public void onItemClick(int position) {

        Intent intent = new Intent(ExerciseCategoryChooser.this, ConfirmAdditionExercise.class);
        activityLauncher2.launch(intent);

    }

}

fragment_profile_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".profile_fragment"
    android:background="@drawable/background_gradient"
    android:id="@+id/profile_frag">

    <include
        android:id="@+id/dateChangerProfile"
        layout="@layout/date_changer_2"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

    <ImageButton
        android:id="@+id/add_button_circle"
        android:layout_width="57.5dp"
        android:layout_height="57.5dp"
        android:background="@drawable/circular_button_background"
        android:src="@drawable/ic_baseline_add_24"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_margin="20dp"
        />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerViewExercises123"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="50dp">

    </androidx.recyclerview.widget.RecyclerView>



</RelativeLayout>

基本上我在 recyclerView 和 ImageButton 之间切换了位置,问题是当我向 recyclerView 添加一个项目时,它有点把回收站视图放在按钮的“前面”,这让我无法点击图片按钮。

正确代码:

fragment_profile_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".profile_fragment"
    android:background="@drawable/background_gradient"
    android:id="@+id/profile_frag">

    <include
        android:id="@+id/dateChangerProfile"
        layout="@layout/date_changer_2"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerViewExercises123"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="50dp">

    </androidx.recyclerview.widget.RecyclerView>

    <ImageButton
        android:id="@+id/add_button_circle"
        android:layout_width="57.5dp"
        android:layout_height="57.5dp"
        android:background="@drawable/circular_button_background"
        android:src="@drawable/ic_baseline_add_24"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_margin="20dp"
        />
    
</RelativeLayout>