首页 > 解决方案 > Android Studio:在另一个活动中单击按钮时更新片段列表

问题描述

我有一个捐赠应用程序,我想在单击 MainActivity 中的捐赠按钮时更新片段中的列表。

界面看起来像这样:

在此处输入图像描述

片段位于屏幕的右半部分。

我在 stackoverflow 上找到了一些资源,并尝试了几个代码,但它似乎不起作用。我在下面附加的代码使用了 detach-attach-commit 方法,但似乎什么也没发生。我用错了吗?方法名称“refreshFragmentUI”也是灰色的,当我将鼠标悬停在它上面时,我收到如下消息:

Method 'refreshFragmentUI(androidx.fragment.app.Fragment)' is never used

如何使用此方法刷新片段?

我以为我的数组可能有问题,但是当我 log.v 数组时,我看到了 logcat 中的数据。

MainActivity.java

package com.example.donation10;

import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.NumberPicker;
import android.widget.ProgressBar;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private Button donateButton;
    private RadioGroup paymentMethod;
    private ProgressBar progressBar;
    private NumberPicker amountPicker;
    private TextView totalTextView;

    private int totalDonated = 0;

    ArrayList<String> array = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });


        // Create the button
        donateButton = (Button) findViewById(R.id.donateButton);

        if (donateButton != null)
        {
            Log.v("Donate", "Really got the donate button");
        }

        paymentMethod = (RadioGroup)   findViewById(R.id.paymentMethod);
        progressBar   = (ProgressBar)  findViewById(R.id.progressBar);
        amountPicker  = (NumberPicker) findViewById(R.id.amountPicker);
        totalTextView = (TextView) findViewById(R.id.totalTextView);

        // set the min and max values for the amount picker
        amountPicker.setMinValue(0);
        amountPicker.setMaxValue(1000);

        //  setting the progress bar
        progressBar.setMax(10000);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void donateButtonPressed (View view)
    {
        int amount  = amountPicker.getValue();
        int radioId = paymentMethod.getCheckedRadioButtonId();

        String method = "";
        if (radioId == R.id.PayPal){
            method = "PayPal";
        } else {
            method = "Direct";
        }

        array.add("hey");
        array.add("You");

        totalDonated = totalDonated + amount;
        progressBar.setProgress(totalDonated);

        String msg = "Total so far $"+totalDonated;
        totalTextView.setText(msg);

        Log.v("array is ", array.get(0));
        Log.v("array is ", array.get(1));
        Log.v("Donate", "Donate Pressed! with amount " + amount + ", method: " + method);
        Log.v("Donate", "Current total " + totalDonated);
    }

    public ArrayList getDonationsArray() {
        return array;
    }

}

捐赠历史.java

package com.example.donation10;

import android.R;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.ListFragment;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

import java.util.ArrayList;

public class DonationHistory extends ListFragment {

    public static DonationHistory newInstance(){

        DonationHistory d = new DonationHistory();

        return d;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.simple_list_item_activated_1, null);

        return super.onCreateView(inflater,container,savedInstanceState);
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ArrayList Array = ((MainActivity) getActivity()).getDonationsArray();

        ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(),
        android.R.layout.simple_list_item_activated_1, Array);
        setListAdapter(adapter);
    }

    public void refreshFragmentUI(Fragment d) {
        getFragmentManager()
                .beginTransaction()
                .detach(d)
                .attach(d)
                .commit();
        Log.v("IsRefresh", "Yes");
    }

    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }
}

日志猫

2020-11-13 18:33:10.835 11293-11293/? I/mple.donation1: Not late-enabling -Xcheck:jni (already on)
2020-11-13 18:33:10.866 11293-11293/? W/mple.donation1: Unexpected CPU variant for X86 using defaults: x86
2020-11-13 18:33:11.268 11293-11293/com.example.donation10 W/mple.donation1: Accessing hidden method Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; (light greylist, linking)
2020-11-13 18:33:11.268 11293-11293/com.example.donation10 W/mple.donation1: Accessing hidden field Landroid/graphics/Insets;->left:I (light greylist, linking)
2020-11-13 18:33:11.268 11293-11293/com.example.donation10 W/mple.donation1: Accessing hidden field Landroid/graphics/Insets;->right:I (light greylist, linking)
2020-11-13 18:33:11.268 11293-11293/com.example.donation10 W/mple.donation1: Accessing hidden field Landroid/graphics/Insets;->top:I (light greylist, linking)
2020-11-13 18:33:11.268 11293-11293/com.example.donation10 W/mple.donation1: Accessing hidden field Landroid/graphics/Insets;->bottom:I (light greylist, linking)
2020-11-13 18:33:11.311 11293-11293/com.example.donation10 W/mple.donation1: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2020-11-13 18:33:11.312 11293-11293/com.example.donation10 W/mple.donation1: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2020-11-13 18:33:11.387 11293-11293/com.example.donation10 W/mple.donation1: Accessing hidden method Landroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic; (light greylist, linking)
2020-11-13 18:33:11.564 11293-11293/com.example.donation10 V/Donate: Really got the donate button
2020-11-13 18:33:11.575 11293-11293/com.example.donation10 D/OpenGLRenderer: HWUI GL Pipeline
2020-11-13 18:33:11.691 11293-11323/com.example.donation10 D/HostConnection: HostConnection::get() New Host Connection established 0xdd72c370, tid 11323
2020-11-13 18:33:11.706 11293-11323/com.example.donation10 D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_2 
2020-11-13 18:33:11.712 11293-11323/com.example.donation10 I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
2020-11-13 18:33:11.714 11293-11323/com.example.donation10 I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
2020-11-13 18:33:11.714 11293-11323/com.example.donation10 I/OpenGLRenderer: Initialized EGL, version 1.4
2020-11-13 18:33:11.714 11293-11323/com.example.donation10 D/OpenGLRenderer: Swap behavior 1
2020-11-13 18:33:11.715 11293-11323/com.example.donation10 W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2020-11-13 18:33:11.715 11293-11323/com.example.donation10 D/OpenGLRenderer: Swap behavior 0
2020-11-13 18:33:11.730 11293-11323/com.example.donation10 D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 0 0
2020-11-13 18:33:11.730 11293-11323/com.example.donation10 D/EGL_emulation: eglCreateContext: 0xdd705360: maj 2 min 0 rcv 2
2020-11-13 18:33:11.758 11293-11323/com.example.donation10 D/EGL_emulation: eglMakeCurrent: 0xdd705360: ver 2 0 (tinfo 0xdd7036a0)
2020-11-13 18:33:11.796 11293-11323/com.example.donation10 D/HostConnection: createUnique: call
2020-11-13 18:33:11.796 11293-11323/com.example.donation10 D/HostConnection: HostConnection::get() New Host Connection established 0xdd72c5a0, tid 11323
2020-11-13 18:33:11.799 11293-11323/com.example.donation10 D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_2 
2020-11-13 18:33:11.799 11293-11323/com.example.donation10 E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1
2020-11-13 18:33:11.832 11293-11323/com.example.donation10 D/EGL_emulation: eglMakeCurrent: 0xdd705360: ver 2 0 (tinfo 0xdd7036a0)
2020-11-13 18:33:20.458 11293-11293/com.example.donation10 V/array is: hey
2020-11-13 18:33:20.458 11293-11293/com.example.donation10 V/array is: You
2020-11-13 18:33:20.458 11293-11293/com.example.donation10 V/Donate: Donate Pressed! with amount 1000, method: Direct
2020-11-13 18:33:20.458 11293-11293/com.example.donation10 V/Donate: Current total 1000
2020-11-13 18:33:22.398 11293-11293/com.example.donation10 V/array is: hey
2020-11-13 18:33:22.398 11293-11293/com.example.donation10 V/array is: You
2020-11-13 18:33:22.399 11293-11293/com.example.donation10 V/Donate: Donate Pressed! with amount 1000, method: Direct
2020-11-13 18:33:22.399 11293-11293/com.example.donation10 V/Donate: Current total 2000

标签: javaandroidandroid-studioandroid-fragments

解决方案


推荐阅读