AndroidのListViewのAdapterは、静的インナークラスで作成したほうがよいのでしょうか?
AndroidのListViewのAdapterを静的インナークラスで実装しています。
AdapterからActivityの変数を参照する為に、Adapterの中に弱参照でActivityを保持しています。
以下、疑問に思っていることです。
・Adapterの中でmActivity.get()がnullを返すことはあるのか?
もしある場合は、TestAdapter.getView()でnullを返してもよいのでしょうか?
但し、固定でnullを返すと例外が発生しました。
・どこかのサイトでインナークラスは静的クラスのほうがメモリリークしないと書いてあったので、Adapterを静的インナークラスにしましたが、正しい実装なのでしょうか?
どうかアドバイスをよろしくお願いします。
public class TestActivity extends Activity {
private List<String> mData = new ArrayList<String>();
private ListView mListView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testactivity);
mListView = (ListView)findViewById(R.id.listview);
mListView.setAdapter(new TestAdapter(this));
}
private static class ViewHolder {
public ViewHolder(View view) {
}
}
private static class TestAdapter extends BaseAdapter {
private WeakReference<TestActivity> mActivity;
public TestAdapter(TestActivity activity) {
super();
mActivity = new WeakReference<TestActivity>(activity);
}
@Override
public int getCount() {
TestActivity activity = mActivity.get();
return activity != null ? activity.mData.size() : 0;
}
@Override
public Object getItem(int position) {
TestActivity activity = mActivity.get();
return activity != null ? activity.mData.get(position) : null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MovieListActivity activity = mActivity.get();
if (activity == null)
return null; //ここでnullを返してもよいのか?
}
}
}