Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio:使用另一个活动中的数据更新片段列表_Java_Android_Android Studio_Android Fragments - Fatal编程技术网

Java Android Studio:使用另一个活动中的数据更新片段列表

Java Android Studio:使用另一个活动中的数据更新片段列表,java,android,android-studio,android-fragments,Java,Android,Android Studio,Android Fragments,我正在制作一个捐赠应用程序。有一个金额选择器,用户可以在其中选择捐赠金额。 还有一个文本视图,如果用户多次捐款,可以查看捐款总额 我正在尝试实现一个捐赠历史记录,其中列表中的每个项目都是$X。我在同一屏幕上使用了一个使用片段的列表,使用预定义的字符串数组效果非常好 每次用户单击“捐赠”按钮时,我试图将捐赠的金额传递给碎片时,我的应用程序崩溃 我想不出是什么问题。我猜可能片段需要用新数据刷新,或者我传递数据的方式不对。我完全被卡住了,不知道如何解决这个问题。非常感谢您的帮助,谢谢 MainAct

我正在制作一个捐赠应用程序。有一个金额选择器,用户可以在其中选择捐赠金额。 还有一个文本视图,如果用户多次捐款,可以查看捐款总额

我正在尝试实现一个捐赠历史记录,其中列表中的每个项目都是$X。我在同一屏幕上使用了一个使用片段的列表,使用预定义的字符串数组效果非常好

每次用户单击“捐赠”按钮时,我试图将捐赠的金额传递给碎片时,我的应用程序崩溃

我想不出是什么问题。我猜可能片段需要用新数据刷新,或者我传递数据的方式不对。我完全被卡住了,不知道如何解决这个问题。非常感谢您的帮助,谢谢

MainActivity.java

public class MainActivity extends AppCompatActivity {

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

    private int totalDonated = 0;

    @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();
            }
        });


        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);

        progressBar.setMax(10000);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

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

        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";
        }

        TITLES[0] = "Donated " + totalDonated;
        totalDonated = totalDonated + amount;
        progressBar.setProgress(totalDonated);

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

        Log.v("Donate", "Donate Pressed! with amount " + amount + ", method: " + method);
        Log.v("Donate", "Current total " + totalDonated);
    }
    String[] TITLES = new String[3];

    public String[] getDonationsArray() {
        return TITLES.clone();
    }
}
DonationHistory.java

public class DonationHistory extends ListFragment {
    ListView listview;
    View view;

    MainActivity newDonationData = new MainActivity();
    String[] Array = newDonationData.getDonationsArray();

    public View onCreateView(LayoutInflater i,ViewGroup container,Bundle savedInstanceState)
    {

        ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(), R.layout.simple_list_item_1,R.id.text1,Array);

        setListAdapter(adapter);
        return super.onCreateView(i,container,savedInstanceState);
    }
}
公共类捐赠历史扩展ListFragment{
列表视图列表视图;
视图;
MainActivity newDonationData=新的MainActivity();
String[]数组=newDonationData.getDonationsArray();
创建视图上的公共视图(LayoutFlater i、ViewGroup容器、Bundle savedInstanceState)
{
ArrayAdapter=新的ArrayAdapter(getActivity(),R.layout.simple_list_item_1,R.id.text1,数组);
setListAdapter(适配器);
返回super.onCreateView(i、容器、savedInstanceState);
}
}

你的
片段
有一些大缺陷

MainActivity newDonationData = new MainActivity();
你不能以这种方式创建
Acivity
,永远不要这样做!即使可以-这是新对象,其
String[]TITLES
始终为空(新创建的)

Fragment
内部,您可以使用
getActivity()
方法获取
Activity
所附加的
Fragment

((MainActivity) getActivity()).getDonationsArray();
只有在创建了活动后才能使用
getActivity()
,请在中签出
Fragment
生命周期

另外,在
super.onCreateView之前,您正在使用
setListAdapter
call-这可能会导致NPE,因为
ListView
没有膨胀/设置,适配器也没有
视图
可附加到。在
super
调用之后,将
setListAdapter
移动到
onViewCreated
方法。但您需要直接从
活动
获取数据,因此在您的情况下,更好的方法是附加在创建的活动上调整
(也在
超级调用之后)


以上都是猜测,因为您没有提供任何带有错误的logcat,我甚至不知道如何开始您的
捐赠历史
片段
(用XML修复?

显示logcat和错误行。。