获取适配器中的android上下文

在Internet上find的许多代码示例中, context都是在适配器的构造函数中获得的。

这个上下文被用来让一个inflatergetView方法中膨胀视图。

我的问题是为什么要在构造函数中获取上下文时,可以很容易地获得上下文

  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)三个好处:

  1. 你只做一次,不是每次都调用getView()
  2. 您也可以在需要时将其用于其他目的。
  3. parentnull时,它也可以工作。

但是,如果您的解决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来获取上下文