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