我有一个简单的问题:
您能否给我一些关于使用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;
}
}
抱歉,如果我的代码中有一些错误,我会打印出来。它就在这里没有拼写检查或语法检查。
答案 0 :(得分: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");
答案 1 :(得分:0)
何时使用?
每当你觉得它更适合你时。
他们之间有什么区别?
无。并不是的。您在不同的类中运行相同的代码。
为什么你认为方法不同?
唯一的区别在于shortcut class
你有一点模块化。您现在可以在任何您想要的活动中创建多个副本。但实际上它只是一个感觉更好的差异。