2012-12-28 64 views
0

我有一個簡單的問題:Android的自定義視圖VS充氣XML

你能不能給我說說使用Custom views vs Layout inflater到執行代碼的一些建議嗎?哪一個更適合使用?有人可以向我解釋兩者的優點和缺點嗎?

如果我的問題不清楚,下面是一個解釋的例子。 聲明是這樣的:

public class Shortcut extends RelativeLayout{ 
    private Button btn; 
    private TextView title; 


/*some getters & setters here*/ 


    public Shortcut(Context context){ 
     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflater.inflate(R.layout.shortcut, /*other params*/); 
     title = v.findViewById(R.id.title); 
     btn = v.findViewById(R.id.btn); 
    } 

} 

而且使用這樣的

public class MainActivit extends Activity{ 
ListView list = new ListView(); 

public void onCreate(Bundle...){ 
    ...... 
    list.setAdapter(new MyAdapter()); 
}  
// some code here 

private class MyAdapter extends BaseAdapter{ 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     Shortcut shortcut = new Shortcut(this); 
     shortcut.setBtnText("i'm btn"); 
     shortcut.setTitle("btn1"); 
     return shortcut; 
    } 
} 

或做這種方式:

public class MainActivit extends Activity{ 
ListView list = new ListView(); 

public void onCreate(Bundle...){ 
    ...... 
    list.setAdapter(new MyAdapter()); 
}  
// some code here 

private class MyAdapter extends BaseAdapter{ 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      View view = convertView; 
      if (view == null) { 
       view = inflater.inflate(R.layout.shortcut, parent, false); 
      }   
      TextView title = (TextView) view.findViewById(R.id.title); 
      Button btn = (Button) view.findViewById(R.id.btn); 
      title.setText("Hey!"); 
      btn.setText("smth"); 
      return view; 
    } 
} 

對不起,如果我有我的代碼中的一些錯誤,我印刷。它只是在這裏沒有拼寫檢查或語法檢查。

回答

3

我更喜歡第一種方式(自定義視圖),因爲它意味着所有的findViewById()操作已經被處理,使您的代碼更加整潔。

按照您的例子:

Shortcut shortcut = new Shortcut(this); 
shortcut.setBtnText("i'm btn"); 
shortcut.setTitle("btn1"); 

比整潔給我很多:

view = inflater.inflate(R.layout.shortcut, parent, false); 
TextView title = (TextView) view.findViewById(R.id.title); 
Button btn = (Button) view.findViewById(R.id.btn); 
title.setText("Hey!"); 
btn.setText("smth"); 
0

何時使用哪個?

每當你覺得它適合你更好。

它們之間有什麼區別?

沒有。不是真的。您在不同的類中運行相同的代碼。

你爲什麼認爲這種方法不同?

唯一的區別是在shortcut class你會有更多的模塊化。您現在可以根據需要創建多個副本。但真正的它只是一個什麼感覺更好的區別。