Fragment
を含むコードを書いていますが、BaseAdapter
という拡張アダプタが含まれています。私はいくつかの項目をアダプタに追加して、それらを画面上に表示しようとしています。ここにコードがあります。Android:アダプタが断片化していない
public class SettingsFragment extends Fragment {
private ListView lvSettings;
private SettingsAdapter settingsAdapter = new SettingsAdapter();
private int[] icons = {
R.drawable.ic_developer
};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_settings, null);
lvSettings = (ListView) view.findViewById(R.id.lvSettings);
lvSettings.setAdapter(settingsAdapter);
initializeAdapter();
return view;
}
private void initializeAdapter() {
int size = icons.length;
SettingsItem[] settingsItems = new SettingsItem[size];
for(int i=0; i<size; i++) {
settingsItems[i] = new SettingsItem(getActivity());
settingsItems[i].setIcon(icons[i]);
settingsItems[i].setTitle(getResources().getStringArray(R.array.settings_items)[i]);
settingsAdapter.addItem(settingsItems[i]);
}
settingsAdapter.notifyDataSetChanged();
}
private class SettingsAdapter extends BaseAdapter {
private ArrayList<SettingsItem> itemsList = new ArrayList<>();
@Override
public int getCount() {
return itemsList.size();
}
@Override
public Object getItem(int position) {
return itemsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
return view;
}
public void addItem(SettingsItem item) {
itemsList.add(item);
}
}
private class SettingsItem {
private ImageView ivIcon;
private TextView tvTitle;
private LayoutInflater inflater;
SettingsItem(Context context) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.listitem_settings, null);
ivIcon = (ImageView) view.findViewById(R.id.ivSettingsItem);
tvTitle = (TextView) view.findViewById(R.id.tvSettingsItem);
}
public void setIcon(int icon) {
ivIcon.setImageResource(icon);
}
public void setTitle(String title) {
tvTitle.setText(title);
}
}
}
このコードを実行しましたが、画面に何も表示されません。リスト項目を画面に表示するには、このコードをどのように変更する必要がありますか?
なぜカスタムアダプターですか?どうして 'ArrayAdapter'はどうですか? – pskink
私はこれまでに 'BaseAdapter'を使用することに慣れているので、 –
は間違っています。既に存在するアダプターを参照すると、将来は多くの時間を節約します – pskink