安卓:ViewPager内DialogFragment:片段不有一番景致 [英] Android : ViewPager inside DialogFragment : Fragment does not have a view

查看:364
本文介绍了安卓:ViewPager内DialogFragment:片段不有一番景致的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个 alertDialog 综合浏览量里面加上取消和OK按钮。

问题是,当我在方法设置适配器 onCreateDialog ,我得到了:


  

java.lang.IllegalStateException:片段不有一番景致。


如果我注释掉这一行,我也没有例外。

我也试图通过覆盖的方法 onCreateView()在类 MyDialog ,问题是相同的

有人有一个想法?

MainActivity.java

 公共类MainActivity扩展FragmentActivity {    私人Button按钮;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);        按钮=(按钮)findViewById(R.id.button);        //捕捉按钮点击
        button.setOnClickListener(新OnClickListener(){
            公共无效的onClick(查看为arg0){
                MyDialog alertdFragment =新MyDialog();
                alertdFragment.show(getSupportFragmentManager(),警告对话框碎片);
            }
        });
    }
}

MyDialog.java

 公共类MyDialog扩展DialogFragment实现OnTabChangeListener,OnPageChangeListener {    私人ViewPager viewPager;
    私人浏览视图。
    私人TabHost tabHost;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
    }    私人列表<片断> getFragments(){
        清单<片断> FLIST =新的ArrayList<片断>();        // TODO这里写您的片段
        fList.add(DetailsFragment.newInstance(1,S1));
        fList.add(DetailsFragment.newInstance(2,S2));
        fList.add(DetailsFragment.newInstance(3,S3));        返回FLIST;
    }    //方法添加TabHost
    私有静态无效AddTab(FragmentActivity fragmentActivity,TabHost tabHost,TabHost.TabSpec则tabspec){
        tabSpec.setContent(新MyTabFactory(fragmentActivity));
        tabHost.addTab(则tabspec);
    }    //管理标签的变化,与网页同步它
    公共无效onTabChanged(字符串标签){
        INT POS = this.tabHost.getCurrentTab();
        this.viewPager.setCurrentItem(POS)
    }    //管理页面的变化,与标签同步它
    @覆盖
    公共无效onPageScrolled(INT为arg0,ARG1浮球,诠释ARG2){
        INT POS = this.viewPager.getCurrentItem();
        this.tabHost.setCurrentTab(POS)
    }
    @覆盖
    公共对话框onCreateDialog(捆绑savedInstanceState){
        建设者建设者=新生成器(getActivity());
        鉴于= getActivity()getLayoutInflater()膨胀(R.layout.dialog,空)。
        viewPager =(ViewPager)view.findViewById(R.id.viewpager);        tabHost =(TabHost)view.findViewById(android.R.id.tabhost);
        tabHost.setup();        // TODO这里写您的标签
        AddTab(getActivity(),this.tabHost,this.tabHost.newTabSpec(TAB1)setIndicator(TAB1)。);
        AddTab(getActivity(),this.tabHost,this.tabHost.newTabSpec(TAB2)setIndicator(TAB2)。);
        AddTab(getActivity(),this.tabHost,this.tabHost.newTabSpec(TAB3)setIndicator(TAB3)。);        tabHost.setOnTabChangedListener(本);        //片段和ViewPager初始化
        清单<片断>片段= getFragments();
        viewPager.setAdapter(新FragmentAdapter(getChildFragmentManager(),片段));
        viewPager.setOnPageChangeListener(本);        //正面按钮
        builder.setPositiveButton(OK,新DialogInterface.OnClickListener(){
            公共无效的onClick(DialogInterface对话,诠释它){
                //做别的事情
            }
        });        //负按钮
        builder.setNegativeButton(取消,新DialogInterface.OnClickListener(){
            公共无效的onClick(DialogInterface对话,诠释它){
                //做别的事情
            }
        });
        builder.setView(视图);
        返回builder.create();
    }    @覆盖
    公共无效onPageScrollStateChanged(INT为arg0){
        // TODO自动生成方法存根
    }    @覆盖
    公共无效使用onPageSelected(INT为arg0){
        // TODO自动生成方法存根
    }}

FragmentAdapter.java

 公共类FragmentAdapter扩展FragmentPagerAdapter {    私人列表<片断>片段;    公共FragmentAdapter(FragmentManager FM){
        超(FM);
    }    公共FragmentAdapter(FragmentManager FM,列表与LT;片断>片段){
        超(FM);
        this.fragments =片段;
    }    @覆盖
    公共片段的getItem(INT位置){
        返回this.fragments.get(位置);
    }    @覆盖
    公众诠释的getCount(){
        返回this.fragments.size();
    }    @覆盖
    公共CharSequence的getPageTitle(INT位置){
        返回页面+位置;
    }    公众诠释getItemPosition(Object对象){
        返回POSITION_NONE;
    }}

DetailsFragment.java

 公共类DetailsFragment扩展片段{    //存储实例变量
    私人字符串称号;
    私人诠释页;    //的newInstance与参数创建片段构造
    公共静态的newInstance DetailsFragment(INT页,标题字符串){
        DetailsFragment fragmentFirst =新DetailsFragment();
        捆绑ARGS =新包();
        args.putInt(someInt页);
        args.putString(someTitle称号);
        fragmentFirst.setArguments(参数);
        返回fragmentFirst;
    }    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        页= getArguments()调用getInt(someInt,0);
        标题= getArguments()的getString(someTitle);
    }    @覆盖
    公共无效onActivityCreated(捆绑savedInstanceState){
        super.onActivityCreated(savedInstanceState);    }    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
        super.onCreateView(充气器,容器,savedInstanceState);
        查看查看= inflater.inflate(R.layout.details,集装箱,FALSE);
        TextView中的TextView =(TextView中)view.findViewById(R.id.detailsText);
        textView.setText(页面+ - +称号);
        返回视图。
    }
}

activity_main.xml中

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    工具:主上下文=>    <按钮
        机器人:ID =@ + ID /按钮
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=对话框/>< / RelativeLayout的>

dialog.xml

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin
    工具:上下文=MainActivity。>    < TabHost
        机器人:ID =@机器人:ID / tabhost
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT>        <的LinearLayout
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =WRAP_CONTENT
            机器人:方向=垂直>            < TabWidget
                机器人:ID =@机器人:ID /标签
                机器人:方向=横向
                机器人:layout_width =FILL_PARENT
                机器人:layout_height =WRAP_CONTENT
                机器人:layout_weight =0/>                <的FrameLayout
                    机器人:ID =@机器人:ID / tabcontent
                    机器人:layout_width =0dp
                    机器人:layout_height =0dp
                    机器人:layout_weight =0/>                    < android.support.v4.view.ViewPager
                        机器人:ID =@ + ID / viewpager
                        机器人:layout_width =FILL_PARENT
                        机器人:layout_height =WRAP_CONTENT
                        机器人:layout_gravity =底/>            < / LinearLayout中>
    < / TabHost>
< / RelativeLayout的>

details.xml

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:方向=垂直>    <的TextView
        机器人:ID =@ + ID / detailsText
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =match_parent
        机器人:layout_gravity =CENTER_HORIZONTAL | center_vertical
        机器人:layout_marginTop =20dip
        机器人:文字=大文本
        机器人:textAppearance =机器人:ATTR / textAppearanceLarge
        机器人:TEXTSIZE =30dip/>< / LinearLayout中>

编辑:曲目列表错误

  20 11-21:12:56.224:E / AndroidRuntime(2864):致命异常:主要
11-21 20:12:56.224:E / AndroidRuntime(2864):java.lang.IllegalStateException:片段不有一番景致
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.app.Fragment $ 1.findViewById(Fragment.java:1443)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.view.ViewPager.populate(ViewPager.java:914)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.view.View.measure(View.java:15848)
11-21 20:12:56.224:E / AndroidRuntime(2864):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)


解决方案

我还没有试过,但基于错误我的猜测是,你正在试图太快配置寻呼机适配器。由于您的code在onCreateDialog,你还没有告诉Android的有关将进入你的对话,或许需要您的视图层次是在地方,你跟孩子碎片经理上班前视图。

尝试将所有有这样的观点寻呼机和标签主机置于onResume做code:

  @覆盖
公共无效onResume(){
    super.onResume();
    如果(viewPager!= NULL){
        返回;
    }    viewPager =(ViewPager)findViewById(R.id.viewpager);    tabHost =(TabHost)findViewById(android.R.id.tabhost);
    tabHost.setup();    // TODO这里写您的标签
    AddTab(getActivity(),this.tabHost,this.tabHost.newTabSpec(TAB1)setIndicator(TAB1)。);
    AddTab(getActivity(),this.tabHost,this.tabHost.newTabSpec(TAB2)setIndicator(TAB2)。);
    AddTab(getActivity(),this.tabHost,this.tabHost.newTabSpec(TAB3)setIndicator(TAB3)。);    tabHost.setOnTabChangedListener(本);    //片段和ViewPager初始化
    清单<片断>片段= getFragments();
    viewPager.setAdapter(新FragmentAdapter(getChildFragmentManager(),片段));
    viewPager.setOnPageChangeListener(本);
}

编辑:
嗯。也许问题是,你需要让碎片得到早些时候在生命周期的建成,然后再打setAdapter。尝试将所有的code,除了实际调用setAdapter回到原来的地方在onCreateDialog了它,包括保存FragmentAdapter在外地,然后只是调用setAdapter在onResume:

  @覆盖
公共无效onResume(){
    super.onResume();
    viewPager.setAdapter(fragmentAdapter);
}

I am trying to create an alertDialog with a pageView inside with a cancel and ok button.

The problem is when I set the adapter in the method onCreateDialog, I got:

"java.lang.IllegalStateException : Fragment does not have a view".

If I comment out this line, I don't have an exception.

I have tried also by override the method onCreateView() in the class MyDialog, the problem is the same.

Someone have an idea?

MainActivity.java

public class MainActivity  extends FragmentActivity {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button);

        // Capture button clicks
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                MyDialog alertdFragment = new MyDialog();
                alertdFragment.show(getSupportFragmentManager(), "Alert Dialog Fragment");
            }
        });
    }
}

MyDialog.java

public class MyDialog extends DialogFragment implements OnTabChangeListener, OnPageChangeListener {

    private ViewPager viewPager;
    private View view;
    private TabHost tabHost;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    private List<Fragment> getFragments(){
        List<Fragment> fList = new ArrayList<Fragment>();

        // TODO Put here your Fragments
        fList.add(DetailsFragment.newInstance(1,"S1"));
        fList.add(DetailsFragment.newInstance(2,"S2"));
        fList.add(DetailsFragment.newInstance(3,"S3"));

        return fList;
    }

    // Method to add a TabHost
    private static void AddTab(FragmentActivity fragmentActivity, TabHost tabHost, TabHost.TabSpec tabSpec) {
        tabSpec.setContent(new MyTabFactory(fragmentActivity));
        tabHost.addTab(tabSpec);
    }

    // Manages the Tab changes, synchronizing it with Pages
    public void onTabChanged(String tag) {
        int pos = this.tabHost.getCurrentTab();
        this.viewPager.setCurrentItem(pos);
    }

    // Manages the Page changes, synchronizing it with Tabs
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        int pos = this.viewPager.getCurrentItem();
        this.tabHost.setCurrentTab(pos);
    }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Builder builder = new Builder(getActivity());
        view = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
        viewPager = (ViewPager) view.findViewById(R.id.viewpager);

        tabHost = (TabHost) view.findViewById(android.R.id.tabhost);
        tabHost.setup();

        // TODO Put here your Tabs
        AddTab(getActivity(), this.tabHost, this.tabHost.newTabSpec("Tab1").setIndicator("Tab1"));
        AddTab(getActivity(), this.tabHost, this.tabHost.newTabSpec("Tab2").setIndicator("Tab2"));
        AddTab(getActivity(), this.tabHost, this.tabHost.newTabSpec("Tab3").setIndicator("Tab3"));

        tabHost.setOnTabChangedListener(this);

        // Fragments and ViewPager Initialization
        List<Fragment> fragments = getFragments();
        viewPager.setAdapter(new FragmentAdapter(getChildFragmentManager(), fragments));
        viewPager.setOnPageChangeListener(this);

        // Positive button
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // Do something else
            }
        });

        // Negative Button
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // Do something else
            }
        });
        builder.setView(view);
        return builder.create();
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onPageSelected(int arg0) {
        // TODO Auto-generated method stub
    }

}

FragmentAdapter.java

public class FragmentAdapter  extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public FragmentAdapter(FragmentManager fm) {
        super(fm);
    }

    public FragmentAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "Page " + position;
    }

    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

}

DetailsFragment.java

public class DetailsFragment extends Fragment {

    // Store instance variables
    private String title;
    private int page;

    // newInstance constructor for creating fragment with arguments
    public static DetailsFragment newInstance(int page, String title) {
        DetailsFragment fragmentFirst = new DetailsFragment();
        Bundle args = new Bundle();
        args.putInt("someInt", page);
        args.putString("someTitle", title);
        fragmentFirst.setArguments(args);
        return fragmentFirst;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        page = getArguments().getInt("someInt", 0);
        title = getArguments().getString("someTitle");
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.details, container,false);
        TextView textView = (TextView) view.findViewById(R.id.detailsText);
        textView.setText(page + " -- " + title);
        return view;
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="dialog" />

</RelativeLayout>

dialog.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0" />

                <FrameLayout
                    android:id="@android:id/tabcontent"
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:layout_weight="0" />

                    <android.support.v4.view.ViewPager
                        android:id="@+id/viewpager"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_gravity="bottom" />

            </LinearLayout>
    </TabHost>
</RelativeLayout>

details.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/detailsText"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_marginTop="20dip"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="30dip" />

</LinearLayout>

Edit : Track list error

11-21 20:12:56.224: E/AndroidRuntime(2864): FATAL EXCEPTION: main
11-21 20:12:56.224: E/AndroidRuntime(2864): java.lang.IllegalStateException: Fragment does not have a view
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.app.Fragment$1.findViewById(Fragment.java:1443)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.view.View.measure(View.java:15848)
11-21 20:12:56.224: E/AndroidRuntime(2864):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)

解决方案

I haven't tried this, but based on the error my guess would be that you are trying to configure your pager adapter too soon. Since your code is in onCreateDialog, you haven't yet told Android about the view that will go into your dialog, and maybe it needs your view hierarchy to be in place before you work with the child fragment manager.

Try moving all the code having to do with the view pager and tab host into onResume:

@Override
public void onResume() {
    super.onResume();
    if (viewPager != null) {
        return;
    }

    viewPager = (ViewPager) findViewById(R.id.viewpager);

    tabHost = (TabHost) findViewById(android.R.id.tabhost);
    tabHost.setup();

    // TODO Put here your Tabs
    AddTab(getActivity(), this.tabHost, this.tabHost.newTabSpec("Tab1").setIndicator("Tab1"));
    AddTab(getActivity(), this.tabHost, this.tabHost.newTabSpec("Tab2").setIndicator("Tab2"));
    AddTab(getActivity(), this.tabHost, this.tabHost.newTabSpec("Tab3").setIndicator("Tab3"));

    tabHost.setOnTabChangedListener(this);

    // Fragments and ViewPager Initialization
    List<Fragment> fragments = getFragments();
    viewPager.setAdapter(new FragmentAdapter(getChildFragmentManager(), fragments));
    viewPager.setOnPageChangeListener(this);
}

EDIT: Hmmm. Maybe the issue is that you need to let the fragments get built earlier in the life cycle, and then call setAdapter later. Try moving all the code except the actual call to setAdapter back where you had it in onCreateDialog, including saving the FragmentAdapter in a field, and then JUST call setAdapter in your onResume:

@Override
public void onResume() {
    super.onResume();
    viewPager.setAdapter(fragmentAdapter);
}

这篇关于安卓:ViewPager内DialogFragment:片段不有一番景致的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆