Java 使用getVIew()在非静态方法中查找片段容器Id
我正在尝试使用以下代码Java 使用getVIew()在非静态方法中查找片段容器Id,java,android,android-studio,android-fragments,Java,Android,Android Studio,Android Fragments,我正在尝试使用以下代码 public int id=GeneralPreferenceFragment.getView().getParent().getId(); 内部设置活动/main活动 但它显示了以下错误 无法从静态上下文引用非静态方法“getView()” 请帮我解决这个问题 以下是使用的方法 public void method1(View view) { Button bt1=(Button)findViewById(R.id.butt
public int id=GeneralPreferenceFragment.getView().getParent().getId();
内部设置活动/main活动
但它显示了以下错误
无法从静态上下文引用非静态方法“getView()”
请帮我解决这个问题
以下是使用的方法
public void method1(View view)
{
Button bt1=(Button)findViewById(R.id.button);
bt1.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
// ViewGroup vg = (ViewGroup) mCurrentFragment.getView().getParent();
Toast.makeText(SettingsActivity.this,"Sound",Toast.LENGTH_SHORT).show();
DataSyncPreferenceFragment fragment;
GeneralPreferenceFragment fragment1;
GeneralPreferenceFragment frag1;
fragment= new DataSyncPreferenceFragment();
fragment1=new GeneralPreferenceFragment();
GeneralPreferenceFragment prefFragment = new GeneralPreferenceFragment();
int id = prefFragment.getView().getParent().getId();
FragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
ft.replace(R.id.layout_1id,fragment);
ft.remove(fragment1);
ft.add(R.id.layout_1id,fragment);
ft.addToBackStack(null);
ft.commit();
}
});
}
如果我使用General preferenceFragment的实例,那么它会显示
无法解析getId()强>
链接fragment-pref_header.xml的头的代码
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<!-- These settings headers are only used on tablets. -->
<header
android:fragment="com.example.amit.check1.SettingsActivity$GeneralPreferenceFragment"
android:icon="@drawable/ic_info_black_24dp"
android:title="@string/pref_header_general"
android:id="@+id/id3"/>
<header
android:fragment="com.example.amit.check1.SettingsActivity$NotificationPreferenceFragment"
android:icon="@drawable/ic_notifications_black_24dp"
android:title="@string/pref_header_notifications" />
<header android:fragment="com.example.amit.check1.SettingsActivity$DataSyncPreferenceFragment"
android:icon="@drawable/ic_sync_black_24dp"
android:title="@string/pref_header_data_sync" />
</preference-headers>
设置Activity.java
包com.example.amit.check1
import android.annotation.TargetApi;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.support.annotation.IdRes;
import android.support.v7.app.ActionBar;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.RingtonePreference;
import android.telecom.Call;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import java.util.List;
public class SettingsActivity extends AppCompatPreferenceActivity {
//private int mcontainerid;
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
if (preference instanceof ListPreference) {
ListPreference listPreference = (ListPreference) preference;
int index = listPreference.findIndexOfValue(stringValue);
preference.setSummary(
index >= 0
? listPreference.getEntries()[index]
: null);
}
else if (preference instanceof RingtonePreference) {
if (TextUtils.isEmpty(stringValue)) {
preference.setSummary(R.string.pref_ringtone_silent);
} else {
Ringtone ringtone = RingtoneManager.getRingtone(
preference.getContext(), Uri.parse(stringValue));
if (ringtone == null) {
// Clear the summary if there was a lookup error.
preference.setSummary(null);
} else {
// Set the summary to reflect the new ringtone display
// name.
String name = ringtone.getTitle(preference.getContext());
preference.setSummary(name);
}
}
} else {
// For all other preferences, set the summary to the value's
// simple string representation.
preference.setSummary(stringValue);
}
return true;
}
};
private static boolean isXLargeTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
}
private static void bindPreferenceSummaryToValue(Preference preference) {
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getString(preference.getKey(), ""));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// int id=GeneralPreferenceFragment.getView().getParent().getId();
setupActionBar();
}
private void setupActionBar() {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
@Override
public boolean onIsMultiPane() {
return isXLargeTablet(this);
}
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.pref_headers, target);
}
protected boolean isValidFragment(String fragmentName) {
return PreferenceFragment.class.getName().equals(fragmentName)
|| GeneralPreferenceFragment.class.getName().equals(fragmentName)
|| DataSyncPreferenceFragment.class.getName().equals(fragmentName)
|| NotificationPreferenceFragment.class.getName().equals(fragmentName);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
Preference preference = findPreference("launchFragment");
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// launch fragment
// addPreferencesFromResource(R.xml.pref_notification);
// Toast.makeText(getActivity(),"hellp",Toast.LENGTH_SHORT).show();
return false;
}
});
setHasOptionsMenu(true);
bindPreferenceSummaryToValue(findPreference("example_text"));
bindPreferenceSummaryToValue(findPreference("example_list"));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
startActivity(new Intent(getActivity(), SettingsActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class NotificationPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_notification);
setHasOptionsMenu(true);
bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone"));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
startActivity(new Intent(getActivity(), SettingsActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class DataSyncPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_data_sync);
setHasOptionsMenu(true);
bindPreferenceSummaryToValue(findPreference("sync_frequency"));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
startActivity(new Intent(getActivity(), SettingsActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
public void method1(View view)
{
Button bt1=(Button)findViewById(R.id.button);
bt1.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View view) {
// ViewGroup vg = (ViewGroup) mCurrentFragment.getView().getParent();
Toast.makeText(SettingsActivity.this,"Sound",Toast.LENGTH_SHORT).show();
DataSyncPreferenceFragment fragment;
GeneralPreferenceFragment fragment1;
GeneralPreferenceFragment frag1;
fragment= new DataSyncPreferenceFragment();
fragment1=new GeneralPreferenceFragment();
GeneralPreferenceFragment prefFragment = new GeneralPreferenceFragment();
// int id = prefFragment.getView().getId();
//String st=Integer.toString(id);
//Toast.makeText(SettingsActivity.this,st,Toast.LENGTH_SHORT).show();
// int id = frag1.getView().getParent().getId();
//ViewGroup vg = (ViewGroup) findViewById(id);
FragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
//ft.add(1234,fragment,"f1");
//int id=fragment.getId();
//String s1=Integer.toString(id);
// Toast.makeText(SettingsActivity.this,s1,Toast.LENGTH_SHORT).show();
// ft.add(R.id.layout_1id,fragment);
//ft.add() will add fragment in previous fragment to
// the previous fragment
// ft.replace(R.id.layout_1id,fragment);
// ft.hide(fragment1);
//ft.hide() is used to hide an fragment;
// ft.detach(fragment1);
//detach method removes the fragment from UI.but it can be reused with the help
//of attach method.
//Toast.makeText(SettingsActivity.this,"removed frag1",Toast.LENGTH_SHORT).show();
//ft.show(fragment);
ft.remove(fragment1);
//remove method removes the fragment from UI;you can reuse fragment again,for reusing
//again you would have to use add method
ft.add(R.id.layout_1id,fragment);
ft.addToBackStack(null);
ft.commit();
}
});
}
}
导入android.annotation.TargetApi;
导入android.app.Fragment;
导入android.app.FragmentManager;
导入android.app.FragmentTransaction;
导入android.content.Context;
导入android.content.Intent;
导入android.content.res.Configuration;
导入android.media.Ringtone;
导入android.media.ringtonemager;
导入android.net.Uri;
导入android.os.Build;
导入android.os.Bundle;
导入android.preference.ListPreference;
导入android.preference.preference;
导入android.support.annotation.IdRes;
导入android.support.v7.app.ActionBar;
导入android.preference.PreferenceFragment;
导入android.preference.PreferenceManager;
导入android.preference.RingtonePreference;
导入android.telecom.Call;
导入android.text.TextUtils;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.Toast;
导入java.util.List;
公共类设置活动扩展AppCompativePreferenceActivity{
//私有int mcontainerid;
私有静态首选项.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener=新首选项.OnPreferenceChangeListener(){
@凌驾
公共布尔onPreferenceChange(首选项、对象值){
字符串stringValue=value.toString();
if(ListPreference的首选项实例){
ListPreference=(ListPreference)首选项;
int index=listPreference.findIndexOfValue(stringValue);
首选项集摘要(
索引>=0
?listPreference.getEntries()[索引]
:空);
}
else if(RingtonePreference的首选项实例){
if(TextUtils.isEmpty(stringValue)){
preference.setSummary(R.string.pref_铃声_静音);
}否则{
Ringtone Ringtone=RingtoneManager.getRingtone(
preference.getContext(),Uri.parse(stringValue));
如果(铃声==null){
//如果存在查找错误,请清除摘要。
preference.setSummary(null);
}否则{
//设置摘要以反映新铃声显示
//名字。
String name=ringtone.getTitle(preference.getContext());
首选项。集合摘要(名称);
}
}
}否则{
//对于所有其他首选项,将摘要设置为值的
//简单的字符串表示法。
首选项.setSummary(stringValue);
}
返回true;
}
};
私有静态布尔值isxlargetable(上下文){
返回(context.getResources().getConfiguration().screenLayout
&Configuration.SCREENLAYOUT\u SIZE\u MASK)>=Configuration.SCREENLAYOUT\u SIZE\u XLARGE;
}
私有静态void bindPreferenceSummaryToValue(首选项){
setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
sBindPreferenceSummaryToValueListener.onPreferenceChange(首选项,
优先权经理
.GetDefaultSharedReferences(首选项.getContext())
.getString(首选项.getKey(),“”);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//int id=generalReferenceFragment.getView().getParent().getId();
setupActionBar();
}
私有void setupActionBar(){
ActionBar ActionBar=getSupportActionBar();
if(actionBar!=null){
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
@凌驾
公共布尔值onIsMultiPane(){
返回Isxlarge平板电脑(此);
}
@凌驾
@TargetApi(构建版本代码蜂窝)
public void onBuildHeaders(列表目标){
loadHeadersFromResource(R.xml.pref_头,目标);
}
受保护的布尔值isValidFragment(字符串碎片名称){
返回PreferenceFragment.class.getName().equals(fragmentName)
||GeneralReferenceFragment.class.getName().equals(fragmentName)
||DataSyncPreferenceFragment.class.getName().equals(fragmentName)
||NotificationPreferenceFragment.class.getName().equals(fragmentName);
}
@TargetApi(构建版本代码蜂窝)
公共静态类GeneralReferenceFragment扩展了PreferenceFragment{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_-general);
首选项=FindReference(“启动片段”);
preference.setOnPreferenceClickListener(新的preference.OnPreferenceClickListener(){
@凌驾
公共布尔值打开首选项单击(首选项){
//发射碎片
//addPreferencesFromResource(R.xml.pref_通知);
//Toast.makeText(getActivity(),“hellp”,Toast.LENGTH_SHORT.show();
返回false;
}
});
设置选项菜单(真);
bindPreferenceSummary
GeneralPreferenceFragment prefFragment = new GeneralPreferenceFragment();
// ... some business logic
public int id = prefFragment.getView().getParent().getId();