導航:首頁 > 方法技巧 > android如何添加適配器的方法

android如何添加適配器的方法

發布時間:2022-08-18 05:14:57

⑴ android 怎麼給headerview添加適配器

首先是RecyclerView的ViewHolder(這裡面的方法可以根據自己需要進行添加)

importandroid.graphics.Bitmap;
importandroid.graphics.drawable.Drawable;
importandroid.os.Build;
importandroid.support.v7.widget.RecyclerView.ViewHolder;
importandroid.text.Spanned;
importandroid.util.SparseArray;
importandroid.view.View;
importandroid.view.animation.AlphaAnimation;
importandroid.widget.Checkable;
importandroid.widget.CheckedTextView;
importandroid.widget.ImageView;
importandroid.widget.TextView;{
privateSparseArraymViews;
privateViewmConvertView;
publicBaseHolder(ViewmConvertView){
super(mConvertView);
this.mConvertView=mConvertView;
this.mViews=newSparseArray<>();
}publicTgetView(intviewId){
Viewview=mViews.get(viewId);
if(null==view){
view=mConvertView.findViewById(viewId);
mViews.put(viewId,view);
}
return(T)view;
}
/**
*設置TextView的內
*
*@paramviewId控制項id
*@paramtext文本內容
*@returnViewHolder
*/
publicBaseHoldersetText(intviewId,Stringtext){
TextViewview=getView(viewId);
view.setText(text);
returnthis;
}
/**
*設置TextView的內
*
*@paramviewId控制項id
*@paramspanned文本內容
*@returnBaseHolder
*/
publicBaseHoldersetText(intviewId,Spannedspanned){
TextViewview=getView(viewId);
view.setText(spanned);
returnthis;
}
/**
*設置TextView的內
*
*@paramviewId控制項id
*@paramresId資源文件中的id
*@returnBaseHolder
*/
publicBaseHoldersetText(intviewId,intresId){
TextViewview=getView(viewId);
view.setText(resId);
returnthis;
}
/**
*@paramviewId控制項id
*@paramresId資源文件中的id
*@returnBaseHolder
*/
(intviewId,intresId){
ImageViewview=getView(viewId);
view.setImageResource(resId);
returnthis;
}
/**
*@paramviewId控制項id
*@parambitmap圖片的的Bitmap
*@returnBaseHolder
*/
(intviewId,Bitmapbitmap){
ImageViewview=getView(viewId);
view.setImageBitmap(bitmap);
returnthis;
}
/**
*@paramviewId控制項id
*@paramdrawable圖片的的Drawable
*@returnBaseHolder
*/
(intviewId,Drawabledrawable){
ImageViewview=getView(viewId);
view.setImageDrawable(drawable);
returnthis;
}
/**
*給控制項設置tag
*
*@paramviewId控制項id
*@paramobjtag
*@returnViewHolder
*/
publicBaseHoldersetTag(intviewId,Objectobj){
Viewview=getView(viewId);
view.setTag(obj);
returnthis;
}
/**
*給控制項設置OnClickListener
*
*@paramviewId控制項id
*@paramlistener點擊事件
*@returnViewHolder
*/
(intviewId,View.OnClickListenerlistener,Objecttag){
Viewview=getView(viewId);
view.setOnClickListener(listener);
view.setTag(tag);
returnthis;
}
/**
*給控制項設置OnClickListener
*
*@paramviewIds控制項ids
*@paramlistener點擊事件
*@returnViewHolder
*/
(View.OnClickListenerlistener,Objecttag,int...viewIds){
for(intviewId:viewIds){
Viewview=getView(viewId);
view.setTag(tag);
view.setOnClickListener(listener);
}
returnthis;
}
/**
*設置選中
*
*@paramchecked是否選擇
*@paramviewIdsview的Id
*@returnBaseHolder
*/
publicBaseHoldersetChecked(booleanchecked,int...viewIds){
for(intviewId:viewIds){
Checkableview=getView(viewId);
view.setChecked(checked);
}
returnthis;
}
/**
*設置view可見
*
*@paramvisible是否看見
*@paramviewIdsview的Id
*@returnBaseHolder
*/
publicBaseHoldersetVisibility(booleanvisible,int...viewIds){
for(intviewId:viewIds){
setVisible(viewId,visible);
}
returnthis;
}
publicBaseHoldersetVisible(intviewId,booleanvisible){
Viewview=getView(viewId);
view.setVisibility(visible?View.VISIBLE:View.GONE);
returnthis;
}publicBaseHoldersetAlpha(floatvalue,int...viewIds){
for(intviewId:viewIds){
setAlpha(viewId,value);
}
returnthis;
}
publicBaseHoldersetAlpha(intviewId,floatvalue){
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){
getView(viewId).setAlpha(value);
}else{
AlphaAnimationalpha=newAlphaAnimation(value,value);
alpha.setDuration(0);
alpha.setFillAfter(true);
getView(viewId).startAnimation(alpha);
}
returnthis;
}
publicBaseHoldersetImageLevel(intviewId,intlevel){
ImageViewview=getView(viewId);
view.setImageLevel(level);
returnthis;
}
publicBaseHoldersetSelected(intviewId,booleanselected){
CheckedTextViewview=getView(viewId);
view.setSelected(selected);
returnthis;
}
}

然後就是關鍵的Adapter了

packagecom.retail.wumartmms.adapter;
importandroid.support.v7.widget.GridLayoutManager;
importandroid.support.v7.widget.RecyclerView;
importandroid.support.v7.widget.StaggeredGridLayoutManager;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importcom.retail.wumartmms.utils.ArrayUtil;
importcom.retail.wumartmms.utils.CommonUtils;
importjava.util.ArrayList;
importjava.util.List;
.Adapter{
publicstaticfinalintTYPE_HEADER=0;
publicstaticfinalintTYPE_NORMAL=1;
protectedintlayoutId;
protectedListmDatas;
protectedViewmHeaderView;
protectedViewemptyView,networkView;
publicLBaseAdapter(intlayoutId){
this.mDatas=newArrayList<>();
this.layoutId=layoutId;
}
publicvoidsetHeaderView(ViewheaderView){
mHeaderView=headerView;
notifyItemInserted(0);
}
publicViewgetHeaderView(){
returnmHeaderView;
}
publicvoidaddItems(Listitems){
if(ArrayUtil.isNotEmpty(items)){
intoldCont=mDatas.size();
mDatas.addAll(items);
if(oldCont==0){
notifyDataSetChanged();
}else{
notifyItemRangeChanged(oldCont,mDatas.size());
}
}
}
publicvoidaddItem(Titem){
mDatas.add(item);
notifyDataSetChanged();
}
publicvoidaddItems(Listitems,booleanisRefresh){
if(isRefresh){
mDatas.clear();
notifyDataSetChanged();
}
addItems(items);
}
publicvoidshowEmptyView(){
if(null!=networkView)
networkView.setVisibility(CommonUtils.isNetworkAvailable(networkView.getContext())?View.GONE:View.VISIBLE);
if(null!=emptyView){
if(null!=networkView&&networkView.getVisibility()==View.VISIBLE){
emptyView.setVisibility(View.GONE);
return;
}
emptyView.setVisibility(isEmpty()?View.VISIBLE:View.GONE);
}
}@Override
publicintgetItemViewType(intposition){
if(mHeaderView==null)returnTYPE_NORMAL;
if(position==0)returnTYPE_HEADER;
returnTYPE_NORMAL;
}
@Override
(ViewGroupparent,finalintviewType){
if(mHeaderView!=null&&viewType==TYPE_HEADER)
returnnewBaseHolder(mHeaderView);
ViewmView=LayoutInflater.from(parent.getContext()).inflate(layoutId,parent,false);
BaseHolderbaseHolder=newBaseHolder(mView);
baseHolder.itemView.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewview){
ObjectvTag=view.getTag();
if(vTag!=null&&vTaginstanceofInteger)
onItemClick(mDatas.get(Integer.valueOf(vTag.toString())));
}
});
returnbaseHolder;
}
protectedvoidonItemClick(Tt){
}
@Override
publicvoidonBindViewHolder(BaseHolderbaseHolder,intposition){
if(getItemViewType(position)==TYPE_HEADER)return;
intpos=getRealPosition(baseHolder);
baseHolder.itemView.setTag(pos);
onBind(baseHolder,pos,mDatas.get(pos));
}
@Override
(RecyclerViewrecyclerView){
super.onAttachedToRecyclerView(recyclerView);
RecyclerView.LayoutManagermanager=recyclerView.getLayoutManager();
if(){
=((GridLayoutManager)manager);
gridManager.setSpanSizeLookup(newGridLayoutManager.SpanSizeLookup(){
@Override
publicintgetSpanSize(intposition){
returngetItemViewType(position)==TYPE_HEADER
?gridManager.getSpanCount():1;
}
});
}
}
@Override
(BaseHolderbaseHolder){
super.onViewAttachedToWindow(baseHolder);
ViewGroup.LayoutParamslp=baseHolder.itemView.getLayoutParams();
if(lp!=null
&&.LayoutParams
&&baseHolder.getLayoutPosition()==0){
StaggeredGridLayoutManager.LayoutParamsp=(StaggeredGridLayoutManager.LayoutParams)lp;
p.setFullSpan(true);
}
}
publicintgetRealPosition(RecyclerView.ViewHolderholder){
intposition=holder.getLayoutPosition();
returnmHeaderView==null?position:position-1;
}
@Override
publicintgetItemCount(){
returnmHeaderView==null?mDatas.size():mDatas.size()+1;
}
publicabstractvoidonBind(BaseHolderbaseHolder,intrealPosition,Tt);
publicbooleanisEmpty(){
returnArrayUtil.isEmpty(mDatas);
}
publicvoidsetEmptyView(ViewemptyView){
this.emptyView=emptyView;
}
publicTgetItem(intposition){
returnmDatas.get(position);
}
publicvoidsetNetworkView(ViewnetworkView){
this.networkView=networkView;
}
}

⑵ listview適配器如何實現

創建繼承BaseAdapter並實現其抽象方法的類MyListViewAdapter
說明
下面的講解中,只創建自定義的適配器類,如何使用請參考android中常用控制項的使用之ListView
1.創建類MyListViewAdapter
創建類MyListViewAdapter,該類繼承BaseAdapter,並實現其抽象方法:
1
2
3
4

int getCount();
Object getItem(int position);
long getItemId(int position);
View getView(int position,View convertView,ViewGroup parent);

getCount需要返回有多少個item,也就是說最會在listview中展示這么多行
getItem需要返回參數position位置的數據
getItemId返回position就行了
2.給MyListViewAdapter類添加成員變數和構造方法
兩個成員變數
1
2

List<String> list;
Context context;

list表示要顯示的數據,context變數在生成View對象時需要用到
構造方法:構造方法是為了給兩個成員變數賦值
1
2
3
4

public MyListViewAdapter(List<String> list , Context context) {
this.list = list;
this.context = context;
}

3.給getCount,getItem,getItemId方法添加代碼
getCount需要返回有多少個item,也就是說最會在listview中展示這么多行,所以返回list.size
getItem需要返回參數position位置的數據,也就是list中第position項的值list.get(position)
getItemId返回position就行了
1
2
3
4
5
6
7
8
9
10
11
12
13
14

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

@Override
public Object getItem(int position) {
return list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

4.給getView方法添加代碼
getView方法是返回位置為position的View對象,第二個參數convertView考慮到資源重用問題,在上下滑動的過程中,需要顯示某項的時候才會調用getView方法,而如果有某項被隱藏不顯示,就會把不顯示那一行的View作為convertView參數傳入,如果沒有某項被隱藏,convertView值為null。可以通過下面代碼中的if(convertView!=null)中的輸出來看哪一行被隱藏了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("調用getView方法,顯示position="+position+"項");
if(convertView!=null){
TextView t = (TextView) convertView.findViewById(R.id.firstTextView);
System.out.println(t.getText());
}else{
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.item_mylistviewadapter, null);
}
TextView t = (TextView)(convertView.findViewById(R.id.firstTextView));
t.setText(list.get(position));
if(position%2==0)
{
t.setBackgroundColor(Color.WHITE);

}
else{
t.setBackgroundColor(Color.GRAY);
}
return convertView;
}

補充:通過xml生成View對象
通過Context對象生成一個LayoutInflater對象
調用LayoutInflater對象的inflate方法生成控制項對象,inflate方法的第一個參數為xml文件,第二個參數一般為null。返回值為該xml文件最外層的標簽對象。
1
2

LayoutInflater layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout convertView =(LinearLayout)layoutInflater.inflate(R.layout.item_mylistvie

源代碼下載
pan..com/s/1ntuQDdv

⑶ android的listview中用自定義適配器時定義復雜底層數據類型怎麼定義

方法/步驟

1

首先將適配器的View視圖表現出來,使用ListView為例,代碼如下。

⑷ android適配器怎樣進行數據適配

顧名思義,就是把一些數據給弄得適當,適合以便於在View上顯示。適配器就像顯示器,把復雜的東西按人可以接受的方式來展現。也可以這樣來理解適配器,ListView通過適配器,理解我們要對ListView里加入什麼內容,而我們在適配器里@Override的方法,就是讓我們寫上我們要告訴這個ListView的一些基本內容。
可以說適配器就是數據和視圖之間的橋梁,學好適配器還是非常重要的。

讓我們先從各個方面理解適配器,然後看一些例子我想應該就可以徹底掌握它了!

適配器的工作原理:
適配器是怎麼處理得到的數據,並把它顯示出來的呢?其實很簡單,說白了適配器它也是一個類,在類裡面它實 現了父類的這幾個方法:
public int getCount() //得到數據的行數
public Object getItem(int position) //根據position得到某一行的記錄
public long getItemId(intposition) //的到某一條記錄的ID
還有最重要的:
publicView getView(intposition, View convertView, ViewGroup parent)
//相比於其它幾個方法這個方法是最重要的,它顯式的定義了適配器將要以什麼樣的方式去顯示我們所 填充的數據,在自定義的適配器裡面我們通常會給它寫個布局文件。
這些在最後的一兩個例子里會仔細講解,我們從簡單的看起:首先看看常用的適配器

我們常用的適配器一共有三個,當然不包含自定義的適配器:就是ArrayAdapter,SimpleAdapter,SimpleCursorAdapter 這三個,他們都是繼承於BaseAdapter 。

下面我會逐一介紹,我們在具體應用中來繼續學習Adapter:
說道Adapter不得不說道ListView,或者說用到ListView不得不提到Adapter
在android開發中ListView是比較常用的組件,它以列表的形式展示具體內容,並且能夠根據數據的長度自適應顯示。
而列表的顯示需要三個元素:
1.ListVeiw 用來展示列表的View。
2.適配器 用來把數據映射到ListView上的中介。
3.數據 具體的將被映射的字元串,圖片,或者基本組件。

根據列表的適配器類型,列表分為三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最為簡單,只能展示一行字。SimpleAdapter有最好的擴充性,可以自定義出各種效果。SimpleCursorAdapter可以認為是SimpleAdapter對資料庫的簡單結合,可以方面的把資料庫的內容以列表的形式展示出來

我們從最簡單的ListView開始(ArrayAdapter):

我打算把這幾種適配器的例子放在一個app裡面,然後上傳到我的資源,再分享鏈接給大家。所以我打算由MainActivity里的Button來跳轉到各個例子,現在讓我們一步步的把這個Demo寫出來。

項目開始啦!

(1)首先,新建一個app ,名字叫做 AdapterDemo ,先在activity_main.xml里添加一個button,一會跳轉的時候使用。

(2)然後新建一個類ArrayAdapterDemo繼承自Activity作為我們第一個小例子的Activity,@Override 我們的onCreate方法
新建一個xml文件arrayadapterdemo.xml作為我們的布局文件,其中包含一個文本域和一個ListView,代碼如下:
arrayadapterdemo.xml:
?

1
2
3
4
5
6
7
8
9
10

<!--?xml version="1.0" encoding="utf-8"?-->
<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:layout_width="wrap_content" android:layout_height="wrap_content" android:text="這是ArrayAdapter的一個例子">
</textview>

<listview android:id="@+id/arrayadapterdemolistview" android:layout_width="wrap_content" android:layout_height="wrap_content">
</listview>

</linearlayout>

(3)然後回到ArrayAdapterDemo,定義一個Listview暫且叫做lv,並且lv=(ListView)findViewById(R.id.arrayadapterdemolistview); ,setContentView()為剛才的xml布局,然後為lv設置一個適配器,這里使用的是安卓原生的ArrayAdapter(Context context, inttextViewResourceId, List objects)來裝配數據,要裝配這些數據就需要一個連接ListView視圖對象和數組數據的適配器 來兩者的適配工作。
ArrayAdapter的構造需要三個參數,依次為:this,布局文件(注意這里的布局文件描述的是列表的每一行的布局, android.R.layout.simple_list_item_1是系統定義好的布局文件只顯示一行文字,數據源(一個List集合)。同時用setAdapter()完 成適配的最後工作。
一般寫一個getData()方法來作為最後一個參數,最終代碼如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

package com.example.adapterdemo;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ArrayAdapterDemo extends Activity {
private ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.arrayadapterdemo);
lv=(ListView)findViewById(R.id.arrayadapterdemolistview);
lv.setAdapter(new ArrayAdapter<string>(this,
android.R.layout.simple_expandable_list_item_1, getData()));
}

public List<string> getData(){

List<string> data = new ArrayList<string>();
data.add("測試數據1");
data.add("測試數據2");
data.add("測試數據3");
data.add("測試數據4");

return data;

}

}
</string></string></string></string>

再在AndroidManifest.xml中注冊Activity並在主界面中完成button監聽跳轉就可以了。

⑸ android 中怎麼自定義個適配器

自定義適配器只需要自己新建一個類繼承自baseadapter就可以了。

⑹ android spinner自定義適配器怎麼添加頭部

自定義適配器中LayoutInflater的使用
在實際開發中LayoutInflater這個類還是非常有用的,它的作用類似於findViewById()。不同點是LayoutInflater是用來找res/layout/下的xml布局文件,並且實例化;而findViewById()是找xml布局文件下的具體widget控制項(如Button、TextView等)。
具體作用:
1、對於一個沒有被載入或者想要動態載入的界面,都需要使用LayoutInflater.inflate()來載入;
2、對於一個已經載入的界面,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。
使用LayoutInflater有兩種方法:
方法一:
[java] view plain
private LayoutInflater listContainer ; // 視圖容器
listContainer = LayoutInflater. from (context); // 創建視圖容器並設置上下文
convertView = listContainer .inflate(R.layout. list_item , null ); // 獲取list_item布局文件的視圖
方法一:
[java] view plain
private LayoutInflater inflater ;
inflater = (LayoutInflater) context.getSystemService(Context. LAYOUT_INFLATER_SERVICE );
convertView = inflater .inflate( R.layout. list_item , null ); //生成條目界面對象

⑺ android自定義適配器怎麼寫

自定義適配器如下:
public
class
ImageAdapter
extends
BaseAdapter{
public
int
res[];
private
Context
context;
public
ImageAdapter(int
res[],Context
context){
this.res=res;
this.context=context;
}
@Override
//返回已定義數據源總數量
public
int
getCount()
{
//
TODO
Auto-generated
method
stub
return
res.length;
}
@Override
//告訴適配器取得目前容器中的數據對象
public
Object
getItem(int
position)
{
//
TODO
Auto-generated
method
stub
return
position;
}
@Override
//告訴適配器取得目前容器中的數據ID
public
long
getItemId(int
position)
{
//
TODO
Auto-generated
method
stub
return
position;
}
@Override
//取得當前欲顯示的圖像View
public
View
getView(int
position,
View
convertView,
ViewGroup
parent)
{
//
TODO
Auto-generated
method
stub
ImageView
image=new
ImageView(context);
image.setBackgroundResource(res[position]);
image.setLayoutParams(new
Gallery.LayoutParams(400,300));
image.setScaleType(ScaleType.FIT_XY);
return
image;
}
}

⑻ android 怎麼給適配器頁面傳數據

使用同步適配器(sync adapter)傳輸數據

在android設備與web伺服器之間實現數據同步能顯著提高你的應用的實用性,讓你的應用更受用戶的歡迎。比如說,你的數據上傳給web伺服器,這就有了一個實用的備份。當用戶的設備離線工作時,這時從伺服器下載輸數據是很有用的。有些情況下,用戶可能會覺得通過網頁的同步介面來輸入或編輯數據更方便,因為這些數據很快就從同頁上同步過來了,他們也可能想在一段時間內採集數據然後再將數據上傳到中央存儲區。

盡管你可以自己為你的應用設計一套數據傳輸系統, 你仍應該考慮使用Android的Sync adapter framework(m同步適配器框架)。這個框架能幫你自動管理數據傳輸以及多個不同應用之間的相應的同步操作。藉助這個框架,你可以使用以下幾個功能,而這些功能不適用於你自己設計的數據傳輸方案。

插件結構
允許你以可調用控制項的形式來向系統添加數據傳輸代碼。

自動化操作
允許你基於大量的標准之上進行數據自動傳輸,其中包括數據修改,運行時間以及當天的時間。另外,你可在系統里添加數據傳輸代碼,這些代碼無法在隊列里運行。當需要的時候,它們就會被運行。

網路自動檢查
當你的設備有網路連接時,系統才會傳輸數據。

提高電池性能
你可以在一個位置來集成管控你所有應用的數據傳輸任務,保證了它們都在同一時間被執行。同樣,你應用的數據傳輸和其它應用的數據傳輸也被限定連在一起了。這些特性能夠減少你的系統在網路上切換的次數,也就減少了電池的消耗。

帳戶的管理和認證
如你的應用有需要用戶的證書或伺服器的登錄,你可以很隨意將帳戶的管理和認證集成到你的數據傳輸中。

這個類展示了如何創建一個同步適配器和bound service,其中bound service 包裹著適配器。如何提供一些組件能夠幫助你將sync adapter 集成到框架里,如何用各種方式運行同步適配器(sync adapter)。

注意:同步適配器可以非同步工作。所以使用前你要先知道它們是定期而有效地傳輸數據,而不是即時地。如果你需要即時傳輸數據,應該在AsyncTask或IntetentService里操作。

教程
創建一個根認證器
學習如何添加一個帳戶處理組件,滿足同步適配器的需要,成為你app的一部分。這個教程會向你展示怎樣簡單地創建一個根驗證器。

創建根Content provider
學習如何添加一個content provider, 滿足同步適配器的需要,成為你app的一部分。這節教程假設你的應用沒有使用content provider, 這里會你演示怎麼創建這個根組件。如果你的應用已經使用了content provider, 請忽略這部分。

創建同步適配器(sync adapter)
學習如何將你的數據傳輸代碼封裝到你的組件,使同步適配器框架(sync adapter framework)可以自動運行。

運行同步適配器(sync adapter)
學習如何使用同步適配器框架(sync adapter framewrok)來觸發和安排你的數據傳輸。

閱讀全文

與android如何添加適配器的方法相關的資料

熱點內容
如何遠離失眠的方法 瀏覽:134
黑頭棒使用方法 瀏覽:736
拼多多日發5000單的方法技巧 瀏覽:182
都保吸入劑使用方法 瀏覽:836
苦蕎麥喂牛的正確方法 瀏覽:829
足踝鍛煉方法圖片 瀏覽:923
古詩詞背誦方法研究 瀏覽:731
拆空調銅管的方法與步驟 瀏覽:308
從車內起步正確方法 瀏覽:90
沒想到這才是正確刷牙方法 瀏覽:100
機油量檢測正確方法 瀏覽:724
綠釉水盂瓷器鑒別的方法 瀏覽:376
羽毛快速摳出方法 瀏覽:183
spss常用的聚類分析方法 瀏覽:885
手機音效卡怎麼安裝使用方法 瀏覽:920
梳子線連接方法 瀏覽:672
手機泡水後發燙處理方法 瀏覽:50
短發無橡皮筋盤頭發的簡單方法 瀏覽:204
腿如何撇出樹杈的三個方法 瀏覽:498
肺癌最新治療方法 瀏覽:220