首选项中的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 楼答案
不可能在同一应用程序的屏幕上同时显示两个活动。这意味着主活动在到达堆栈顶部之前无法工作
那么,偏好活动是如何被调用的呢?改变偏好后,什么触发了主要活动
因此,假设用户处于主活动中,并且有一个意图打开首选项活动,那么有几种方法可以做到这一点
您可以启动preferenceActivity以获得结果,在toast的代码所在的位置加载数据(如果是异步的,则最好),然后使用结果完成活动
另一个选项是评论中的内容。让主要活动在onResume和onPause停止收听中收听广播。然后,首选项活动将触发一个异步进程并自行完成。主活动现在是可见的,当异步进程结束时,发送主活动将接收的广播。如果异步过程可能太快,那么可以将信息存储在共享首选项中,并在MainActivity启动时获取数据。或者,您也可以使用一个标志启动MainActivity,返回堆栈并传递一个额外的参数,您可以在MainActivity中的onNewIntent()方法上获得该参数,并执行所需的工作
但基本上,您需要搜索如何将信息从一个活动传递到堆栈中的另一个活动