有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

首选项中的java Android按钮更改主活动

我有一个偏好活动,我想添加一个按钮。如果单击此按钮,则应加载一些数据并更新MainActivity

我怎样才能将Main活动中的内容从PreferenceActivity中更改

我无法从所有其他问题中找出答案,所以感谢您为我指出解决方案!:)

我的密码

res/xml/preferences。xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:安卓="http://schemas.安卓.com/apk/res/安卓">

    <Preference
        安卓:key="loadDataButton"
        安卓:title="Click to update data"
        安卓:summary="This needs internet connection."
        安卓:widgetLayout="@layout/load_data_button"
        ></Preference>
</PreferenceScreen>

编辑:res/layout/load_data_按钮。xml

也许你也可以在这里使用onClick

<?xml version="1.0" encoding="utf-8"?>
<Button
    xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:id="@+id/loadDataButton"
    安卓:text="Button"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:onClick="loadDataButtonClicked">
</Button>

偏好活动。java

我想让Toast在这里工作会告诉我如何解决这个问题

import 安卓.os.Bundle;
import 安卓.preference.Preference;
import 安卓.preference.PreferenceActivity;
import 安卓.preference.PreferenceFragment;
import 安卓.widget.Toast;

public class PreferencesActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(安卓.R.id.content, new MyPreferenceFragment()).commit();

    }

    public static class MyPreferenceFragment extends PreferenceFragment
    {
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);

            Preference button = findPreference("loadDataButton");
            button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference preference) {

                    // simple code works, but I can't access MainActivity
                    Toast.makeText(getApplicationContext(), "Test which doesn't work.", Toast.LENGTH_SHORT).show();

                    return true;
                }
            });


        }

    }

}

功能我实际上想调用按钮点击

这个函数大概在类中的MainActivity.java public class MainActivity extends AppCompatActivity {...}

    public void loadDataButtonClicked(View v) {

        // If permission not given
        if (ContextCompat.checkSelfPermission(getApplicationContext(),
                Manifest.permission.INTERNET) == PackageManager.PERMISSION_DENIED) {
            ActivityCompat.requestPermissions((Activity) getApplicationContext(),
                    new String[] {Manifest.permission.INTERNET},
                    0x2);

        }

        SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        final String event_key = SP.getString("event_key", "None");

        RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
        String url ="https://www.google.com";

        StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {/* not important*/};

        queue.add(stringRequest);

    }


共 (1) 个答案

  1. # 1 楼答案

    不可能在同一应用程序的屏幕上同时显示两个活动。这意味着主活动在到达堆栈顶部之前无法工作

    那么,偏好活动是如何被调用的呢?改变偏好后,什么触发了主要活动

    因此,假设用户处于主活动中,并且有一个意图打开首选项活动,那么有几种方法可以做到这一点

    您可以启动preferenceActivity以获得结果,在toast的代码所在的位置加载数据(如果是异步的,则最好),然后使用结果完成活动

    另一个选项是评论中的内容。让主要活动在onResume和onPause停止收听中收听广播。然后,首选项活动将触发一个异步进程并自行完成。主活动现在是可见的,当异步进程结束时,发送主活动将接收的广播。如果异步过程可能太快,那么可以将信息存储在共享首选项中,并在MainActivity启动时获取数据。或者,您也可以使用一个标志启动MainActivity,返回堆栈并传递一个额外的参数,您可以在MainActivity中的onNewIntent()方法上获得该参数,并执行所需的工作

    但基本上,您需要搜索如何将信息从一个活动传递到堆栈中的另一个活动