當前位置:首頁 » 安卓系統 » android滑動fragment

android滑動fragment

發布時間: 2023-09-05 13:05:46

『壹』 android fragment怎麼監聽上下滑動

在Android應用中,經常需要手勢滑動操作,比如上下滑動,或左右方向滑動,處理手勢滑動 。通常有兩種方法:一種是單獨實現setOnTouchListener監聽器來,另一種是構建手勢探測器

第一種方法,就是在要實現滑動的View中,實現OnTouchListener監聽事件,然後判斷KeyDonw和KeyUp 直接的位置距離來判斷滑動方向,核心實現代碼如下:

/**
* 設置上下滑動作監聽器
* @author jczmdeveloper
*/
private void setGestureListener(){
myView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:
mPosX = event.getX();
mPosY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
mCurPosX = event.getX();
mCurPosY = event.getY();

break;
case MotionEvent.ACTION_UP:
if (mCurPosY - mPosY > 0
&& (Math.abs(mCurPosY - mPosY) > 25)) {
//向下滑動

} else if (mCurPosY - mPosY < 0
&& (Math.abs(mCurPosY - mPosY) > 25)) {
//向上滑動
collapse();
}

break;
}
return true;
}

});
}

第二種方法:就是構建手勢探測器,如GestureDetector mygesture = new GestureDetector(this);,然後在onFling方法中根據MotionEvent的兩個參數的 按下和滑動以及放開的位置和距離來判斷滑動方向以及滑動速度等的。要構建GestureDetector,必須要和OnTouchListener一起使用,因為必須設置Touch監聽,核心實現實例如下:

import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

public class TagScrollView extends FrameLayout implements OnTouchListener, OnGestureListener{
private float mPosX, mPosY, mCurPosX, mCurPosY;
private static final int FLING_MIN_DISTANCE = 20;// 移動最小距離
private static final int FLING_MIN_VELOCITY = 200;// 移動最大速度
//構建手勢探測器
GestureDetector mygesture = new GestureDetector(this);

public TagScrollView(Context context) {
this(context, null);
}

public TagScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public TagScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);

//setGestureListener();
//設置Touch監聽
this.setOnTouchListener(this);
//允許長按
this.setLongClickable(true);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return mygesture.onTouchEvent(event);
}

@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}

@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
// e1:第1個ACTION_DOWN MotionEvent
// e2:最後一個ACTION_MOVE MotionEvent
// velocityX:X軸上的移動速度(像素/秒)
// velocityY:Y軸上的移動速度(像素/秒)

// X軸的坐標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒
//向
if (e1.getY() - e2.getY() > FLING_MIN_DISTANCE){
// && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
collapse();
}
//向上
if (e2.getY() - e1.getY() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {

}
return false;
}

}


『貳』 Android開發 :Fragment懶載入的幾種方式與性能對比

TabLayout+ViewPager+Fragment是我們開發常用的組合。ViewPager的默認機制就是把全部的Fragment都載入出來,而為了保障一些用戶體驗,我們使用懶載入的Fragment,就是讓我們再用戶可見這個Fragment之後才處理業務邏輯。

而我們在一些設備或版本中可能就出現懶載入失效的問題。其實谷歌早就把一些懶載入的方案都標記棄用了,我們一直都用的老的隨時會失效的Api。萬一哪天徹底失效了就會導致線上事故。

接下來我們就看看Fragment的懶載入是如何演變的。谷歌又是推薦我們如何使用的。

在AndroidX還沒出來的時候,大家的懶載入應該都是這樣。判斷setUserVisibleHint的方法,當用戶可見的時候才回調方法去載入邏輯。

例如的我封裝:

使用的示例:

擴展方法:

Fragment:

到此就實現了onLazyInitData的回調,只有出現Fragment顯示在前台的時候才會調用方法,執行邏輯。

每次判斷 setUserVisibleHint 和 onHiddenChanged 也麻煩,並且他們並不穩定,我也遇到過不回調的時候。

Android出來之後,給 FragmentStatePagerAdapter 添加了一個 @Behavior int behavior 的參數。

其本質就是內部幫你處理和切換MaxLifecycle:

如何使用呢:

之前的擴展方法以及預留了 behavior 參數,當為1的時候就不會回調 setUserVisibleHint 方法了,我們直接監聽 OnResume 即可。

注意這個頁面繼承的就不是我們自定義的懶載入Fragment了。普通的Fragment 回調 onResume 即可。

ViewPager2出來之後。我們的 FragmentStatePagerAdapter 退出歷史舞台。

即便能用,即便效果還是和ViewPage2的效果一樣,但是還是標記廢棄了。具體原因我也不知道,據說是因為老版本會出現問題導致數據丟失,頁面空白。

ViewPage2我們都知道內部是通過RV實現的。但是對於Fragment的處理有單獨的Adapter實現。

擴展方法:

使用:

使用的方式和ViewPager差不多,這里的Fragment也是使用普通的Fragment即可。

內存佔用分別取三組數據

ViewPager數據

ViewPager2數據

結論 ViewPager2基於RV實現的效果還是比老版ViewPager要騷好一點。

並且老版本標記廢棄,大家如果是用ViewPager2的話,還是推薦使用ViewPager2實現。如果大家還是用的老版本的ViewPager也推薦使用behavor參數。使用 onResume 實現懶載入的實現。以後再換到ViewPager2的話,可以無縫切換過來。

說明一下,測試數據僅供參考,畢竟我也不是專業測試,測試數據源也不不多。如有不對的地方,也望大家指正。

『叄』 android里不同的activity可以實現滑屏的效果嗎好像viewfling時同一個Activity的切換把

通常情況下是用ViewPager+Fragment來實現滑屏的效果。

1.Fragment是android3.0引入的新控制項,果應用使用在3.0以下、1.6及以上的版本,需要引入v4包。

2.Fragment支持在不同的Activity中使用並且可以處理自己的輸入事件以及生命周期方法等。

3.Fragment的生命周期方法依賴於Activity的生命周期,例如一個Activity的onPause()的生命周期方法被調用的時候這個Activity中的所有的Fragment的onPause()方法也將被調用。

4.FragmentManager提供了對Activity運行時的Fragment的添加、刪除、替換的操作。在Activity運行期間可以添加Fragment而不是在XML布局文件中進行定義。如果打算在Activity中改變Fragment的生命過程。如果要執行添加、刪除、修改的操作,必須通過FragmentManager的對象獲得一個FragmentTransaction對象,通過它的API來執行這些操作。

5.兩個單獨的Fragment之間是不應該進行通信的。應該使用他們所存在的Activity作為溝通的紐帶。




『肆』 android怎麼實現頁面的左右滑動

Android上有一個控制項叫做ViewPager,該控制項可以根據item的多少實現左右滑動的效果。
Android上還有一個東西叫做Fragment,這是一個依賴於Activity而又獨立的頁面。
綜合這兩個控制項的特性,可以使用ViewPager+Fragment的方式,即在ViewPager里嵌入Fragment的方式,實現頁面左右滑動的效果。

『伍』 Android ViewPager + Fragment 實現導航欄(可以左右滑動)

先上圖

使用HorizontalScrollView可以讓超出屏幕的導航欄可以滑動,每個RadioButton代表一個導航標題,android:button="@null"去掉RadioButton的選中圓圈

選中的下劃線xml文件

將RadioButton導航欄的標題裝在一個list集合裡面,新增標題的時候可以直接在list里添加RadioButton的id,簡約了ViewPage滑動定位到相應的RadioButton和相應的Fragment,不用when每個id去判斷。

增加標題時也要add對應的Fragment

繼承FragmentStatePagerAdapter 。當ViewPager中的Fragment數量相對較多時繼承FragmentStatePagerAdapter,少時可以繼承FragmentPagerAdapter

『陸』 android中fragmenttabhost怎麼設置左右滑動

先來看看整個demo的結構:

TabAFm到TabEFm都是Fragment,並且每個Fragment對應一個布局文件。
TabAFm.java
View Code
如上述代碼所示,TabAFm是一個Fragment,對應的布局文件是tab_a.xml,並實現了他的所有的生命周期回調函數並列印,便於調試
tab_a.xml布局中有個EditText
其他的Fragment大同小異,這里就不貼出代碼了

現在來看MainActivity:
View Code
MainActivity上述代碼所示
MainActivity是包含Fragment的Activity(也就是這里的5個Fragment)
他繼承了FragmentActivity(因為我這里用的是android-support-v4.jar)
用一個List<Fragment>去維護5個Fragment,也就是5個tab
main布局中有一個id為tab_content的FrameLayout,用來存放要顯示的Fragment。底部有一個RadioGroup,用於tab的切換,如下:
View Code
現在回到MainActivity中,下面這個FragmentTabAdapter類是關鍵,是我自己編寫的用於綁定和處理fragments和RadioGroup之間的邏輯關系
FragmentTabAdapter tabAdapter = new FragmentTabAdapter(this, fragments, R.id.tab_content, rgs);

現在看下FragmentTabAdapter:
View Code
這里解決Fragment切換重新載入布局的辦法,用的是把幾個Fragment全部Add,然後根據要顯示的哪個Fragment設置show或者hide
效果輸出:
10-10 11:55:41.168: INFO/System.out(18368): AAAAAAAAAA____onAttach// 第一次進入,顯示TabA
10-10 11:55:41.168: INFO/System.out(18368): AAAAAAAAAA____onCreate
10-10 11:55:41.168: INFO/System.out(18368): AAAAAAAAAA____onCreateView
10-10 11:55:41.175: INFO/System.out(18368): AAAAAAAAAA____onActivityCreated
10-10 11:55:41.179: INFO/System.out(18368): AAAAAAAAAA____onStart
10-10 11:55:41.179: INFO/System.out(18368): AAAAAAAAAA____onResume
10-10 11:55:44.980: INFO/System.out(18368): AAAAAAAAAA____onPause// 從TabA切換到TabB(TabA調用onPause)
10-10 11:55:44.980: INFO/System.out(18368): Extra---- 1 checked!!!
10-10 11:55:44.996: INFO/System.out(18368): BBBBBBBBBBB____onAttach
10-10 11:55:44.996: INFO/System.out(18368): BBBBBBBBBBB____onCreate
10-10 11:55:44.996: INFO/System.out(18368): BBBBBBBBBBB____onCreateView
10-10 11:55:45.004: INFO/System.out(18368): BBBBBBBBBBB____onActivityCreated
10-10 11:55:45.004: INFO/System.out(18368): BBBBBBBBBBB____onStart
10-10 11:55:45.004: INFO/System.out(18368): BBBBBBBBBBB____onResume
10-10 11:55:52.062: INFO/System.out(18368): BBBBBBBBBBB____onPause// 從TabB切換到TabC(TabB調用onPause)
10-10 11:55:52.062: INFO/System.out(18368): Extra---- 2 checked!!!
10-10 11:55:52.082: INFO/System.out(18368): CCCCCCCCCC____onAttach
10-10 11:55:52.082: INFO/System.out(18368): CCCCCCCCCC____onCreate
10-10 11:55:52.086: INFO/System.out(18368): CCCCCCCCCC____onCreateView
10-10 11:55:52.090: INFO/System.out(18368): CCCCCCCCCC____onActivityCreated
10-10 11:55:52.090: INFO/System.out(18368): CCCCCCCCCC____onStart
10-10 11:55:52.090: INFO/System.out(18368): CCCCCCCCCC____onResume
10-10 11:56:06.535: INFO/System.out(18368): CCCCCCCCCC____onPause// 從TabC切換到TabB(TabC調用onPause)
10-10 11:56:06.535: INFO/System.out(18368): BBBBBBBBBBB____onResume// 從TabC切換到TabB(TabB調用onResume)
10-10 11:56:06.535: INFO/System.out(18368): Extra---- 1 checked!!!

好了,到此為止,我們已經用Fragment實現了類似TabHost的功能了,下面來看下各個Fragment之間的通信
現在的情況是TabAFm中有個EditText,TabBFm中有個Button,MainActivity中有個變數「hello」
要做的是,切換到TabA,輸入「I'm TabA」,切換到B,點擊Button後,Toast顯示「hello I'm TabA」
MainActivity中沒什麼好說的,就一個hello變數:
public String hello = "hello ";

TabAFm在布局文件tab_a.xml中加個EditText,設置個id就可以了
TabBFm中:
View Code
// 獲得綁定的FragmentActivity
MainActivity activity = ((MainActivity)getActivity());

通過getActivity()即可得到Fragment所在的FragmentActivity

『柒』 android 在fragment里的怎樣實現滑動fragment

按照一般的思路,我們或許會這么做:首先,使用getActionBar()方法獲得操作欄,然後我們將操作欄的導航模式設置為Tab,並添加一些Tab,然後實現TabListener介面;其次,我們將多個布局通過Inflater()方法變成View,然後放到ViewPager裡面,並實現OnPageChangeListener介面就可以了。由此我們可以寫出下面的代碼:

package com.Android.AnyViewUI;

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;

public class MainActivity extends FragmentActivity implements TabListener,OnPageChangeListener {

private ActionBar mActionBar;
private ViewPager mViewPager;
private TabPagerAdapter mAdapter;
private ArrayList<View> mViews;
private ArrayList<ActionBar.Tab> mTabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
//取得ActionBar
mActionBar=getActionBar();
//以Tab方式導航
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//禁用ActionBar標題
mActionBar.setDisplayShowTitleEnabled(false);
//禁用ActionBar圖標
mActionBar.setDisplayUseLogoEnabled(false);
//禁用ActionBar返回鍵
mActionBar.setDisplayShowHomeEnabled(false);
//添加Tabs
mTabs=new ArrayList<ActionBar.Tab>();

ActionBar.Tab tab0=mActionBar.newTab();
tab0.setText("界面一");
tab0.setTabListener(this);
mTabs.add(tab0);
mActionBar.addTab(tab0);

ActionBar.Tab tab1=mActionBar.newTab();
tab1.setText("界面二");
tab1.setTabListener(this);
mTabs.add(tab1);
mActionBar.addTab(tab1);

ActionBar.Tab tab2=mActionBar.newTab();
tab2.setText("界面三");
tab2.setTabListener(this);
mTabs.add(tab2);
mActionBar.addTab(tab2);

//獲取ViewPager
mViewPager=(ViewPager)findViewById(R.id.ViewPager);
//初始化mViews
mViews=new ArrayList<View>();
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_0, null));
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_1, null));
mViews.add(LayoutInflater.from(this).inflate(R.layout.layout_2, null));
//初始化mAdapter
mAdapter=new TabPagerAdapter(mViews);
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(this);
//默認顯示第二項
mViewPager.setCurrentItem(2);

}


@Override
public void onTabReselected(Tab mTab, FragmentTransaction arg1)
{

}

@Override
public void onTabSelected(Tab mTab, FragmentTransaction arg1)
{
if(mViewPager!=null)
{
mViewPager.setCurrentItem(mTab.getPosition());
}
}

@Override
public void onTabUnselected(Tab mTab, FragmentTransaction arg1)
{

}

@Override
public void onPageScrollStateChanged(int arg0)
{

}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{

}

@Override
public void onPageSelected(int Index)
{
//設置當前要顯示的View
mViewPager.setCurrentItem(Index);
//選中對應的Tab
mActionBar.selectTab(mTabs.get(Index));
}

}
其中,TabPagerAdapter是一個繼承自PagerAdapter的適配器類:

package com.Android.AnyViewUI;

import java.util.ArrayList;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;

public class TabPagerAdapter extends PagerAdapter
{

private ArrayList<View> mViews;
public TabPagerAdapter(ArrayList<View> mViews)
{
this.mViews=mViews;
}

@Override
public void destroyItem(View container, int position, Object object)
{
((ViewPager)container).removeView(mViews.get(position));
}

@Override
public Object instantiateItem(View container, int position)
{
((ViewPager)container).addView(mViews.get(position), 0);
return mViews.get(position);
}

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

@Override
public boolean isViewFromObject(View mView, Object mObject)
{
return (mView==mObject);
}

}

我們的代碼從邏輯上來講是沒有什麼問題的,但是當我們試圖運行這段代碼的時候,我們發現這段代碼出了問題,而問題就出在OnTabSelected()上。但是我們冷靜下來想了想,沒有錯啊,那麼問題到底出在哪裡呢?看到網上的朋友說,這里這個適配器應該繼承自FragmentPagerAdapter:

package com.Android.AnyViewUI;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class ViewPagerAdapter extends FragmentPagerAdapter {

//定義三個Fragment的索引
public static final int Fragment_Index_0=0;
public static final int Fragment_Index_1=1;
public static final int Fragment_Index_2=2;

public ViewPagerAdapter(FragmentManager fragmentManager)
{
super(fragmentManager);
}

@Override
public Fragment getItem(int Index)
{
Fragment mFragemnt=null;
switch(Index)
{
case Fragment_Index_0:
mFragemnt=new Fragment_0();
break;
case Fragment_Index_1:
mFragemnt=new Fragment_1();
break;
case Fragment_Index_2:
mFragemnt=new Fragment_2();
break;
}
return mFragemnt;
}

@Override
public int getCount()
{
return 3;
}

}


其中,Fragment_0、Fragment_1、Fragment_2是繼承自Fragment的類,由於三個布局基本一樣,這里只給出Fragment_0的代碼:

package com.Android.AnyViewUI;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment_0 extends Fragment
{

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View mView=inflater.inflate(R.layout.layout_0, container, false);
return mView;
}

}

『捌』 Android組件之Fragment(一)---基礎知識與運用

Fragment是Android3.0後引入的一個新的API,他出現的初衷是為了適應大屏幕的平板電腦, 當然現在他仍然是平板APP UI設計的寵兒,而且我們普通手機開發也會加入這個Fragment, 我們可以把他看成一個小型的Activity,又稱Activity片段!想想,如果一個很大的界面,我們 就一個布局,寫起界面來會有多麻煩,而且如果組件多的話是管理起來也很麻煩!而使用Fragment 我們可以把屏幕劃分成幾塊,然後進行分組,進行一個模塊化的管理!從而可以更加方便的在 運行過程中動態地更新Activity的用戶界面!另外Fragment並不能單獨使用,他需要嵌套在Activity 中使用,盡管他擁有自己的生命周期,但是還是會受到宿主Activity的生命周期的影響,比如Activity 被destory銷毀了,他也會跟著銷毀!

引用官方的一張圖片,其實已經說明問題了,就是為了更好的適配大屏,在大屏的時候,不需要去在一個activity內部通過復雜的布局和界面去實現,只需要去在一個activity內部,通過多個fragment來做界面布局實現即可,而且針對於多個fragment來說, 每個fragment有單獨的生命周期,

Demo樣例,我們在一個界面中,有上下兩個fragment,如圖所示:

Step 2: Fragment創建,視圖載入,數據賦值
BlankFragment .java

Step 3: Activity在onCreate( )方法中調用setContentView()之後調用FragmentTransaction 進行事務提交
FragmentTestActivity.java

在xml中聲明兩個fragment,指定為具體的fragment

Step 1:定義Fragment的布局,就是fragment顯示內容的

Step 2:自定義一個Fragment類,需要繼承Fragment或者他的子類,重寫onCreateView()方法 在該方法中調用:inflater.inflate()方法載入Fragment的布局文件,接著返回載入的view對象
BlankFragment.java

Step 3:在需要載入Fragment的Activity對應的布局文件中添加fragment的標簽, 記住,name屬性是全限定類名哦,就是要包含Fragment的包名,如:

Step 4: Activity在onCreate( )方法中調用setContentView()載入布局文件即可!

針對在一個Activity中的某個Layout中切換Fragment,,無非兩種方法:

我們自己看一下方法注釋

源碼方法注釋裡面說的很明白,這個方法會移除所有的fragment,然後添加當前的fragment。
這時分為兩種情況,一種是fragment已有並且在前台展示,一種是未有或者在後台,針對於前者,此時replace,生命周期不會發生變化,針對後者,生命周期會重新走

分為兩種情況,一種fragment已存在,一種未存在,針對於前者,生命周期無變化,但是會回調onHiddenChanged方法,針對於後者,生命周期會創建一次。

1.Fragment是Google官方引入的一個為了適配大屏、多頁面的一個組件。您可以理解為它就是一個類而已,只不過裡麵包含了View,並且與activity的生命周期進行了關聯。
2.動態載入與靜態載入相對來說,建議使用動態載入,靜態載入固定在了xml文件中,永遠不變。
3.replace的fragment如果不在前台,會執行所有生命周期,反之不會執行任何生命周期方法;hide+show生命周期並不會發生變化,但是會回調onHiddenChanged方法,在實際開發中,建議add之後,使用hide+show來操作fragment,一方面減少資源的重復載入和創建,另外一方面提升用戶體驗感。
4.fragment的生命周期大體上和activity一致,但是前期和後期多了一些東西,因為fragment內部有view,那麼這個view需要進行創建、然後添加到activity內部,所以相應的在onCreate與onStart之間就多了幾個方法-onCreateView、onViewCreated。相同的道理,fragment的view與activity解綁,也相應的在onStop與onDestory之間多個方法-onDestroyView。onAttach與onDetach可以理解為視圖與activity產生關聯和接觸關聯,是最開始和最後的步驟。

Demo地址

熱點內容
家用電腦改成伺服器並讓外網訪問 發布:2025-02-01 15:30:23 瀏覽:354
javac工資 發布:2025-02-01 15:24:28 瀏覽:22
如何刪除伺服器登錄賬號 發布:2025-02-01 15:21:05 瀏覽:498
瑞薩編程器 發布:2025-02-01 15:19:18 瀏覽:85
上海ntp伺服器搭建 發布:2025-02-01 15:03:38 瀏覽:991
c游戲編程基礎 發布:2025-02-01 15:00:17 瀏覽:993
routejs怎麼動態配置 發布:2025-02-01 14:59:07 瀏覽:502
家用電腦安裝伺服器內存 發布:2025-02-01 14:38:50 瀏覽:257
增量調制編解碼實驗報告 發布:2025-02-01 14:30:30 瀏覽:787
不良人2無敵傷害腳本 發布:2025-02-01 14:23:04 瀏覽:398