获取适配器中的android上下文
在Internet上find的许多代码示例中, context
都是在适配器的构造函数中获得的。
这个上下文被用来让一个inflater
在getView
方法中膨胀视图。
我的问题是为什么要在构造函数中获取上下文时,可以很容易地获得上下文
LayoutInflater inflater; @Override public View getView(int position, View convertView, ViewGroup parent) { if(inflater == null){ Context context = parent.getContext(); inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } ... ... return convertView; }
还有没有什么理由不使用上述方法,因为直到现在我还没有使用它的任何问题。
在构造函数中获取上下文具有(至less)三个好处:
- 你只做一次,不是每次都调用
getView()
。 - 您也可以在需要时将其用于其他目的。
- 当
parent
为null
时,它也可以工作。
但是,如果您的解决scheme没有任何问题,您可以坚持下去。
如果某人将创build一个使用BaseAdapter
来存储视图的类(也许它会在以后将它们附加到父项)? 在这种情况下, parent
可能为null
。
这不是一个很大的问题,自己决定什么更好。
例如:
public class MockWithAdapter{ private BaseAdapter mAdapter; public MockWithAdapter(BaseAdapter adapter){ mAdapter = adapter; } public List<View> mock(){ int size = mAdapter.getCount(); List<View> views = new ArrayList(size); for(int i=0; i<size; i++) views.add(mAdapter.getView(i, null, null)); return views; } }
然后你可以用这个视图来做任何你想要的:
MockWithAdapter m = new MockWithAdapter(adapter); ListView lv = new ListView(context); for(View v : m.mock) lv.addView(v);
这里是一个例子:
@Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; Holder holder; if (view == null) { view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_job, parent, false); holder = new Holder(view, this); view.setTag(holder); } else { holder = (Holder) view.getTag(); } holder.parse(getItem(position), position); return view; } public class Holder { @Bind(R.id.type) TextView type; @Bind(R.id.date_time) TextView dateTime; @Bind(R.id.grade) TextView grade; public Holder(View view) { ButterKnife.bind(this, view); } public void parse(final GetGradeHistoryResponse.GradeHistory item) { if (item.grade < 0) { grade.setTextColor(App.getInstance() .getResources().getColor(R.color.withdraw_status)); grade.setText(String.valueOf(item.grade)); } else { grade.setTextColor(App.getInstance() .getResources().getColor(R.color.primary)); grade.setText("+" + String.valueOf(item.grade)); } type.setText(item.type); dateTime.setText(item.datetime); } }
您可以通过view.getContext() in the Holder
来获取上下文