如何获得编辑框和单选按钮的每一个值,当我点击扩展的子元素? [英] How to get every value of EditBox and RadioButton, when I click on expandable child element?

查看:211
本文介绍了如何获得编辑框和单选按钮的每一个值,当我点击扩展的子元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可扩展的ListView,其中每parentview有一个子视图。 在子视图我有一个子子元素:EditText上,TextView的和单选

子元素具有的onclick上输入后,单选按钮和的EditText值不同的值

  

CategoryActivity.java

 包com.restaurant.app;

    公共类CategoryActivity扩展活动实现OnClickListener {


    公共静态最后弦乐TAG_TITLE =称号;
    公共静态最后弦乐TAG_PRICE =价格;
    私有静态最后弦乐TAG_CATEGORY =类;
    私有静态最后弦乐TAG_DETAIL =细节;
    私有静态最后弦乐TAG_MENU =菜单;
    私有静态最后弦乐TAG_ID =ID;
    私有静态最后弦乐TAG_NOME =诺姆;
    私有静态最后弦乐TAG_HOTELID =hotel_id;
    私有静态最后弦乐TAG_DESCRIPTION =说明;
    私有静态最后弦乐TAG_SERVICES =服务;
    私有静态最后弦乐TAG_URLID =URLID;
    私有静态最后弦乐TAG_RESTAURANTID =restaurant_id;
    私有静态最后弦乐TAG_USERID =USER_ID;
    私有静态最后弦乐TAG_OFFERTA =offerta;
    私有静态最后弦乐TAG_ preZZO =prezzo;


    ArrayList的<字符串> resultparent =新的ArrayList<字符串>();
    ArrayList的<对象> resultchild =新的ArrayList<对象>();
    ArrayList的< HashMap的<字符串,字符串>>孩子=新的ArrayList< HashMap的<字符串,字符串>>();


    //为的childList项目
    ArrayList的< ArrayList的< HashMap的<字符串,字符串>>>的childList =新的ArrayList< ArrayList的< HashMap的<字符串,字符串>>>();

    ImageView的imagehome;
    ImageView的imagemenu;
    ImageView的imagebooking;
    ImageView的imageordernow;
    ExpandableListView expandablelistview;
    所属分类categoryadapter;
    SimpleExpandableListAdapter适配器;


    @覆盖
    公共无效的onCreate(包savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.booking);

        imagehome =(ImageView的)findViewById(R.id.imagehome);
        imagehome.setOnClickListener(本);

        imagemenu =(ImageView的)findViewById(R.id.imagemenu);
        imagemenu.setOnClickListener(本);

        imageordernow =(ImageView的)findViewById(R.id.imageordernow);
        imageordernow.setOnClickListener(本);

        expandablelistview =(ExpandableListView)findViewById(R.id.expandablelistview);


        新CategoryAsynctask()执行();

    }

    公共类CategoryAsynctask扩展的AsyncTask<字符串,字符串,ArrayList的<字符串>>
    {
        @覆盖
        受保护的ArrayList<字符串> doInBackground(字符串...为arg0)
        {

            JsonParser jparser =新JsonParser();
            字符串URL =htt​​p://cssthemeclub.com/demo/saffron/webservices/categorymenu.php?restid=5;
            字符串数据= jparser.getJSONFromUrl(URL);


            尝试
            {
                JSONObject的jobject =新的JSONObject(数据);
                JSONArray jcategory = jobject.getJSONArray(TAG_CATEGORY);

                Log.e(类型长度,--->中+ jcategory.length());

                的for(int i = 0; I< jcategory.length();我++)
                {

                    JSONObject的jdetail = jcategory.getJSONObject(我).getJSONObject(TAG_DETAIL);

                    字符串categoryId = jdetail.get(TAG_ID)的ToString();
                    字符串诺姆= jdetail.get(TAG_NOME)的ToString();
                    串restaurantid = jdetail.get(TAG_RESTAURANTID)的ToString();
                    resultparent.add(诺姆);

                    JSONArray JMenu的=新JSONArray();
                    JMenu的= NULL;
                    JMenu的= jcategory.getJSONObject(我).getJSONArray(TAG_MENU);

                    //Log.e("Jmenu","--->"+jmenu);

                    孩子=新的ArrayList< HashMap的<字符串,字符串>>();
                    child.clear();

                    对于(INT J = 0; J< jmenu.length(); J ++)
                    {
                            字符串MENUID = jmenu.getJSONObject(J).getString(TAG_ID)的ToString();
                            字符串报价= jmenu.getJSONObject(J).getString(TAG_OFFERTA)的ToString();
                            串价格= jmenu.getJSONObject(J).getString(TAG_ preZZO)的ToString();

                            //Log.e("menu","--->"+offer);
                            //Log.e("price","-->"+price);

                            HashMap的<字符串,字符串>图=新的HashMap<字符串,字符串>();

                            map.put(TAG_MENU,MENUID);
                            map.put(TAG_ preZZO,价格);
                            map.put(TAG_OFFERTA,提供);
                            map.put(TAG_RESTAURANTID,restaurantid);

                            child.add(图)
                            childlist.add(子);

                    }
                    resultchild.add(子);

                }
                Log.e(结果子, - >中+ resultchild);

            }
            赶上(例外五)
            {

            }

            返回resultparent;
        }

        @覆盖
        保护无效onPostExecute(ArrayList中<字符串>结果)
        {
            super.onPostExecute(结果);

            categoryadapter =新的所属分类(resultparent,resultchild);
            categoryadapter.setInflater((LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE),CategoryActivity.this);
            expandablelistview.setAdapter(categoryadapter);

    }
 }
        @覆盖
        公共无效的onClick(视图v)
        {
            开关(v.getId())
            {
                案例R.id.imagehome:意向家庭=新的意图(CategoryActivity.this,HomeActivity.class);
                                          startActivity(家庭);
                                          打破;

                案例R.id.imagemenu:意向菜单=新的意图(CategoryActivity.this,MenuActivity.class);
                                          startActivity(菜单);
                                          打破;

                案例R.id.imageordernow:意向ordernow =新的意图(CategoryActivity.this,OrderDetailActivity.class);
                                          startActivity(ordernow);
                                          打破;

                默认                 :
                                          打破;
            }
        }

    }
 

  

类别List.java

 公共类所属分类扩展BaseExpandableListAdapter
{
    私有静态最后弦乐TAG_OFFERTA =offerta;
    私有静态最后弦乐TAG_ preZZO =prezzo;
    私有静态最后弦乐TAG_RESTAURANTID =restaurant_id;
    私有静态最后弦乐TAG_MENU =菜单;
    私有静态最后弦乐TAG_ID =ID;
    公共活动的活动;
    公众的ArrayList<字符串> resultparent;
    公众的ArrayList< HashMap的<字符串,字符串>> tempchild;
    公众的ArrayList<对象> resultchild =新的ArrayList<对象>();
    ArrayList的< HashMap的<字符串,字符串>>的childList =新的ArrayList< HashMap的<字符串,字符串>>();
    公共LayoutInflater充气= NULL;


    字符串ID;
    字符串数量;
    字符串称号;
    字符串MENUID;
    字符串的SessionID;
    字符串restorantid;
    字符串的价格;



    公共所属分类(ArrayList中<字符串> GROUPLIST,ArrayList的<对象> childItem)
    {
          resultparent = GROUPLIST;
          this.resultchild = childItem;
    }

    公共无效setInflater(LayoutInflater mInflater,活动行为)
    {
          this.inflater = mInflater;
          活动=行为;
    }

    @覆盖
    公共对象getChild(INT groupPosition,INT childPosition)
    {

        返回null;
    }

    @覆盖
    众长getChildId(INT groupPosition,INT childPosition)
    {

        返回0;
    }

    @覆盖
    公共查看getChildView(INT groupPosition,诠释childPosition,布尔isLastChild,查看convertView,父母的ViewGroup)
    {

          tempchild =(ArrayList的< HashMap的<字符串,字符串>>)resultchild.get(groupPosition);

          TextView的textprice,textmenutitle;
          最后的EditText editqty;

          RadioGroup中radiogroupchilli;
          RadioGroup中radiogroupoil;

          最后ImageView的imagechilli;
          最后ImageView的imagechillitwo;

          最后ImageView的imageoil;
          最后ImageView的imagechiz;


         //单选radiochillion,radiochillioff,radiooil,radiochiz;

          如果(convertView == NULL)
          {
              convertView = inflater.inflate(R.layout.redlistchild,NULL);
          }


          radiogroupchilli =(RadioGroup中)convertView.findViewById(R.id.radiogroupchilli);
          radiogroupoil =(RadioGroup中)convertView.findViewById(R.id.radiogroupoil);

          imagechilli =(ImageView的)convertView.findViewById(R.id.imagechilli);
          imagechillitwo =(ImageView的)convertView.findViewById(R.id.imagechillitwo);

          imageoil =(ImageView的)convertView.findViewById(R.id.imageoil);
          imagechiz =(ImageView的)convertView.findViewById(R.id.imagechiz);

          textprice =(TextView中)convertView.findViewById(R.id.textprice);
          textprice.setText(tempchild.get(childPosition)获得(TAG_ preZZO)的ToString());

          textmenutitle =(TextView中)convertView.findViewById(R.id.textmenutitle);
          textmenutitle.setText(tempchild.get(childPosition)获得(TAG_OFFERTA)的ToString());

          editqty =(EditText上)convertView.findViewById(R.id.editqty);

          convertView.setTag(childPosition);

          radiogroupchilli.setOnCheckedChangeListener(新OnCheckedChangeListener()
          {

                @覆盖
                公共无效onCheckedChanged(RadioGroup中组,诠释checkedId)
                {
                    开关(checkedId)
                    {
                        案例R.id.radiochillion:
                                                   imagechillitwo.setImageResource(R.drawable.chilitwooff);
                                                   imagechilli.setImageResource(R.drawable.chilion);
                                                   打破;

                        案例R.id.radiochillioff:
                                                   imagechillitwo.setImageResource(R.drawable.chilitwoon);
                                                   imagechilli.setImageResource(R.drawable.chilioff);
                                                   打破;
                    }
                }

           });

          radiogroupoil.setOnCheckedChangeListener(新OnCheckedChangeListener()
          {

                @覆盖
                公共无效onCheckedChanged(RadioGroup中组,诠释checkedId)
                {
                    开关(checkedId)
                    {
                        案例R.id.radiooil:
                                              imageoil.setImageResource(R.drawable.oilon);
                                              imagechiz.setImageResource(R.drawable.chiijoff);
                                              打破;

                        案例R.id.radiochiz:
                                              imageoil.setImageResource(R.drawable.oiloff);
                                              imagechiz.setImageResource(R.drawable.chijion);
                                              打破;
                    }
                }

           });

          返回convertView;

  }

    @覆盖
    公众诠释getChildrenCount(INT groupPosition)
    {

        返程((ArrayList中<字符串>)resultchild.get(groupPosition))的大小()。

    }

    @覆盖
    公共对象getGroup(INT groupPosition)
    {

        返回resultparent.get(groupPosition);
    }


    @覆盖
    公众诠释getGroupCount()
    {

        返回resultparent.size();
    }



    @覆盖
    众长getGroupId(INT groupPosition)
    {

        返回0;
    }

    @覆盖
    公共查看getGroupView(INT groupPosition,布尔isExpanded,查看convertView,父母的ViewGroup)
    {
         TextView的texttitle;
         最后的LinearLayout nonvegtitlelistlayout;

         如果(convertView == NULL)
         {
             convertView = inflater.inflate(R.layout.redlistgroup,NULL);
         }

         nonvegtitlelistlayout =(的LinearLayout)convertView.findViewById(R.id.nonvegtitlelistlayout);
         texttitle =(TextView中)convertView.findViewById(R.id.texttitle);
         texttitle.setText(resultparent.get(groupPosition));

        返回convertView;
    }


    @覆盖
    公共布尔hasStableIds()
    {
        返回true;
    }

    @覆盖
    公共布尔isChildSelectable(INT groupPosition,INT childPosition)
    {
        返回true;
    }

     @覆盖
     公共无效onGroupCollapsed(INT groupPosition)
     {
        super.onGroupCollapsed(groupPosition);
     }

     @覆盖
     公共无效onGroupExpanded(INT groupPosition)
     {
         super.onGroupExpanded(groupPosition);
     }

}
 

解决方案

而不是直接访问视图(通过的ViewGroup 儿童迭代,这甚至不会正常工作您的期望,因为 ExpandableListView 回收它的观点,以及的ListView ),请你应该输入的数据存储到某种模型。

在换句话说,你在列表中显示的数据,同时,应该通过一些信息支持(的String [] 在simpliest情况下)。所以,你的任务是与一些特定的类,它会认为你需要的信息来支持显示的数据。例如,您可以将其命名为选项

然后,当你正在编辑在的EditText 数据,保存输入文本的选项实例对应以 ExpandableListView 的当前位置。当你需要检索输入的信息,你只要通过每一个选项迭代您保存。

I have an expandable ListView, where every parentview has a child view. In child view I have a sub-child element: EditText, TextView and RadioButton.

Child element have different value onclick on radiobutton and edittext value after entered

CategoryActivity.java

   package com.restaurant.app;

    public class CategoryActivity extends Activity implements OnClickListener {


    public static final String TAG_TITLE = "title";
    public static final String TAG_PRICE="price";
    private static final String TAG_CATEGORY="category";
    private static final String TAG_DETAIL="detail";
    private static final String TAG_MENU="menu";
    private static final String TAG_ID="id";
    private static final String TAG_NOME="nome";
    private static final String TAG_HOTELID="hotel_id";
    private static final String TAG_DESCRIPTION="description";
    private static final String TAG_SERVICES="services";
    private static final String TAG_URLID="urlid";
    private static final String TAG_RESTAURANTID="restaurant_id";
    private static final String TAG_USERID="user_id";
    private static final String TAG_OFFERTA="offerta";
    private static final String TAG_PREZZO="prezzo";


    ArrayList<String> resultparent = new ArrayList<String>();
    ArrayList<Object> resultchild = new ArrayList<Object>();
    ArrayList<HashMap<String,String>> child = new ArrayList<HashMap<String,String>>();


    // for childlist item
    ArrayList<ArrayList<HashMap<String, String>>> childlist = new ArrayList<ArrayList<HashMap<String,String>>>();

    ImageView imagehome;
    ImageView imagemenu;
    ImageView imagebooking;
    ImageView imageordernow;
    ExpandableListView expandablelistview;
    CategoryList categoryadapter;   
    SimpleExpandableListAdapter adapter;


    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.booking);   

        imagehome=(ImageView)findViewById(R.id.imagehome);
        imagehome.setOnClickListener(this);

        imagemenu=(ImageView)findViewById(R.id.imagemenu);
        imagemenu.setOnClickListener(this);

        imageordernow=(ImageView)findViewById(R.id.imageordernow);
        imageordernow.setOnClickListener(this);

        expandablelistview = (ExpandableListView)findViewById(R.id.expandablelistview);    


        new CategoryAsynctask().execute("");

    }

    public class CategoryAsynctask extends AsyncTask<String,String,ArrayList<String>> 
    {
        @Override
        protected ArrayList<String> doInBackground(String... arg0)
        {

            JsonParser jparser = new JsonParser();
            String url="http://cssthemeclub.com/demo/saffron/webservices/categorymenu.php?restid=5";
            String data=jparser.getJSONFromUrl(url);


            try
            {
                JSONObject jobject=new JSONObject(data);                
                JSONArray jcategory=jobject.getJSONArray(TAG_CATEGORY);

                Log.e("Category length","--->"+jcategory.length());

                for (int i=0;i<jcategory.length();i++)
                {   

                    JSONObject jdetail=jcategory.getJSONObject(i).getJSONObject(TAG_DETAIL);

                    String categoryid=jdetail.get(TAG_ID).toString();
                    String nome=jdetail.get(TAG_NOME).toString();
                    String restaurantid=jdetail.get(TAG_RESTAURANTID).toString();
                    resultparent.add(nome);

                    JSONArray jmenu = new JSONArray();
                    jmenu=null;
                    jmenu=jcategory.getJSONObject(i).getJSONArray(TAG_MENU);

                    //Log.e("Jmenu","--->"+jmenu);

                    child=new ArrayList<HashMap<String,String>>();
                    child.clear();

                    for(int j=0;j<jmenu.length();j++)
                    {                           
                            String menuid=jmenu.getJSONObject(j).getString(TAG_ID).toString();
                            String offer=jmenu.getJSONObject(j).getString(TAG_OFFERTA).toString();
                            String price=jmenu.getJSONObject(j).getString(TAG_PREZZO).toString();

                            //Log.e("menu","--->"+offer);
                            //Log.e("price","-->"+price);

                            HashMap<String, String> map = new HashMap<String, String>();

                            map.put(TAG_MENU,menuid);
                            map.put(TAG_PREZZO,price);
                            map.put(TAG_OFFERTA,offer);
                            map.put(TAG_RESTAURANTID,restaurantid);

                            child.add(map);
                            childlist.add(child);

                    }
                    resultchild.add(child);

                }
                Log.e("Result Child","--->"+resultchild);

            }
            catch (Exception e) 
            {

            }

            return resultparent;
        }

        @Override
        protected void onPostExecute(ArrayList<String> result)
        {   
            super.onPostExecute(result);

            categoryadapter= new CategoryList(resultparent,resultchild);
            categoryadapter.setInflater((LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE),CategoryActivity.this);
            expandablelistview.setAdapter(categoryadapter);

    }   
 }
        @Override
        public void onClick(View v) 
        {
            switch (v.getId())
            {
                case R.id.imagehome     : Intent home = new Intent(CategoryActivity.this,HomeActivity.class);
                                          startActivity(home);
                                          break;

                case R.id.imagemenu     : Intent menu = new Intent(CategoryActivity.this,MenuActivity.class);
                                          startActivity(menu);  
                                          break;

                case R.id.imageordernow : Intent ordernow= new Intent(CategoryActivity.this,OrderDetailActivity.class);
                                          startActivity(ordernow); 
                                          break;

                default                 :   
                                          break;
            }
        }

    }

Category List.java

public class CategoryList extends BaseExpandableListAdapter
{   
    private static final String TAG_OFFERTA="offerta";
    private static final String TAG_PREZZO="prezzo";
    private static final String TAG_RESTAURANTID="restaurant_id";
    private static final String TAG_MENU="menu";
    private static final String TAG_ID="id";
    public Activity activity;
    public ArrayList<String> resultparent;
    public ArrayList<HashMap<String,String>> tempchild; 
    public ArrayList<Object> resultchild=new ArrayList<Object>();
    ArrayList<HashMap<String,String>> childlist = new ArrayList<HashMap<String,String>>();
    public LayoutInflater inflater = null;


    String id;
    String qty;
    String title;   
    String menuid;  
    String sessionid;
    String restorantid;
    String price;



    public CategoryList(ArrayList<String> grouplist,ArrayList<Object> childItem)
    {   
          resultparent=grouplist;
          this.resultchild = childItem;
    }

    public void setInflater(LayoutInflater mInflater, Activity act)
    {   
          this.inflater = mInflater;
          activity = act;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) 
    {   

        return null;
    }   

    @Override
    public long getChildId(int groupPosition, int childPosition)
    {

        return 0;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) 
    {   

          tempchild = (ArrayList<HashMap<String,String>>)resultchild.get(groupPosition); 

          TextView textprice,textmenutitle;
          final EditText editqty;

          RadioGroup radiogroupchilli;
          RadioGroup radiogroupoil;

          final ImageView imagechilli;
          final ImageView imagechillitwo;

          final ImageView imageoil;
          final ImageView imagechiz;


         // RadioButton radiochillion,radiochillioff,radiooil,radiochiz;

          if(convertView == null)
          {  
              convertView = inflater.inflate(R.layout.redlistchild,null);
          }


          radiogroupchilli=(RadioGroup)convertView.findViewById(R.id.radiogroupchilli);
          radiogroupoil=(RadioGroup)convertView.findViewById(R.id.radiogroupoil);

          imagechilli=(ImageView)convertView.findViewById(R.id.imagechilli);
          imagechillitwo=(ImageView)convertView.findViewById(R.id.imagechillitwo);

          imageoil=(ImageView)convertView.findViewById(R.id.imageoil);
          imagechiz=(ImageView)convertView.findViewById(R.id.imagechiz);

          textprice=(TextView)convertView.findViewById(R.id.textprice);
          textprice.setText(tempchild.get(childPosition).get(TAG_PREZZO).toString());

          textmenutitle=(TextView)convertView.findViewById(R.id.textmenutitle);
          textmenutitle.setText(tempchild.get(childPosition).get(TAG_OFFERTA).toString());

          editqty=(EditText)convertView.findViewById(R.id.editqty);       

          convertView.setTag(childPosition);

          radiogroupchilli.setOnCheckedChangeListener(new OnCheckedChangeListener()
          {

                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId)
                {
                    switch(checkedId)
                    {
                        case R.id.radiochillion  : 
                                                   imagechillitwo.setImageResource(R.drawable.chilitwooff);
                                                   imagechilli.setImageResource(R.drawable.chilion);
                                                   break;

                        case R.id.radiochillioff : 
                                                   imagechillitwo.setImageResource(R.drawable.chilitwoon);
                                                   imagechilli.setImageResource(R.drawable.chilioff);
                                                   break;
                    }
                }

           });

          radiogroupoil.setOnCheckedChangeListener(new OnCheckedChangeListener()
          {

                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId)
                {
                    switch(checkedId)
                    {
                        case R.id.radiooil  : 
                                              imageoil.setImageResource(R.drawable.oilon);
                                              imagechiz.setImageResource(R.drawable.chiijoff);
                                              break;

                        case R.id.radiochiz : 
                                              imageoil.setImageResource(R.drawable.oiloff);
                                              imagechiz.setImageResource(R.drawable.chijion);   
                                              break; 
                    }
                }

           });

          return convertView;

  }

    @Override
    public int getChildrenCount(int groupPosition)
    {   

        return ((ArrayList<String>)resultchild.get(groupPosition)).size();

    }

    @Override
    public Object getGroup(int groupPosition) 
    {

        return resultparent.get(groupPosition);
    }


    @Override
    public int getGroupCount()
    {

        return resultparent.size();
    }



    @Override
    public long getGroupId(int groupPosition) 
    {

        return 0;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
    {   
         TextView texttitle;
         final LinearLayout nonvegtitlelistlayout;

         if(convertView == null)
         { 
             convertView = inflater.inflate(R.layout.redlistgroup, null);
         }

         nonvegtitlelistlayout=(LinearLayout)convertView.findViewById(R.id.nonvegtitlelistlayout);
         texttitle=(TextView)convertView.findViewById(R.id.texttitle);
         texttitle.setText(resultparent.get(groupPosition));

        return convertView;
    }


    @Override
    public boolean hasStableIds() 
    {   
        return true;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition)
    {   
        return true;
    }

     @Override
     public void onGroupCollapsed(int groupPosition)
     {
        super.onGroupCollapsed(groupPosition);
     }

     @Override
     public void onGroupExpanded(int groupPosition) 
     {
         super.onGroupExpanded(groupPosition);
     }

}

解决方案

Instead of accessing view directly (by iterating through children of ViewGroup, which won't even work as you expect, since ExpandableListView recycles it's view as well as ListView does), you should store entered data into some sort of model.

In other words, while you're displaying data in list, it should be backed by some information (String[] in simpliest case). So, your task is to back displayed data with some specific class, which will hold information that you need. For example, you can name it Option.

Then, when you're editing data in EditText, you saving entered text into instance of Option that corresponds to current position of ExpandableListView. When you'll need to retrieve entered information, you just iterate through every Option that you saved.

这篇关于如何获得编辑框和单选按钮的每一个值,当我点击扩展的子元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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