【发布时间】:2019-05-24 12:00:12
【问题描述】:
我有一个偏好活动,我想在其中添加一个按钮。如果单击此按钮,它应该加载一些数据并更新 MainActivity。
如何从 PreferenceActivity 更改 MainActivity 中的内容?
我无法从所有其他 SO 问题中弄清楚,所以感谢您为我指出解决方案! :)
我的代码
res/xml/preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="loadDataButton"
android:title="Click to update data"
android:summary="This needs internet connection."
android:widgetLayout="@layout/load_data_button"
></Preference>
</PreferenceScreen>
编辑:res/layout/load_data_button.xml
或许有人也可以在这里使用onClick。
<?xml version="1.0" encoding="utf-8"?>
<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loadDataButton"
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="loadDataButtonClicked">
</Button>
PreferencesActivity.java
我认为让Toast 在这里工作会告诉我如何解决问题。
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.widget.Toast;
public class PreferencesActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.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);
}
【问题讨论】:
-
尝试使用广播接收器或接口。
标签: java android android-button android-preferences