다이얼로그에 커스텀 리스트를 배치하려고 합니다....
Text view | Progress bar
형태의 아이템을 가진 리스트를 만들어서 처음 다이얼로그를 띄웠을때는 progress bar가 보이지 않는 상태로 뜨되
아이템을 선택했을 시 Progress bar가 보여지는 리스트 다이얼로그를 만드려고 합니다....
public class AlbumListDialog extends Dialog{
Context context;
private CustomGridView albumTitleGrid;
private ArrayList<AlbumListData> grid;
private AlbumListAdapter listAdapter;
public AlbumListDialog(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.context = context;
}
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.album_list_dialog);
setTitle("Album");
albumTitleGrid = (CustomGridView)findViewById(R.id.album_title_list);
int layoutID = R.layout.album_list_item;
listAdapter = new AlbumListAdapter(context, layoutID, grid);
if(listAdapter != null)
albumTitleGrid.setAdapter(listAdapter);
}
public void addItem(AlbumListData data){
grid.add(data);
}
}
//AlbumListAdapter
public class AlbumListAdapter extends ArrayAdapter<AlbumListData> implements Filterable{
private ArrayList<AlbumListData> items;
private Context currentContext;
private int resource;
private TextView album_title;
private ProgressBar progressbar;
public AlbumListAdapter(Context context, int textViewResourceId, ArrayList<AlbumListData> _items) {
super(context, textViewResourceId);
// TODO Auto-generated constructor stub
currentContext = context;
resource = textViewResourceId;
items = _items;
}
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout griditem;
if(convertView == null){
griditem = new LinearLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater vi;
vi = (LayoutInflater)getContext().getSystemService(inflater);
vi.inflate(resource, griditem, true);
}
else{
griditem = (LinearLayout) convertView;
}
AlbumListData data = items.get(position);
album_title = (TextView)griditem.findViewById(R.id.album_title);
progressbar = (ProgressBar)griditem.findViewById(R.id.list_load_progreesbar);
if(album_title != null)
{
album_title.setText(data.getAlbumTitle());
}
if(progressbar != null)
{
if(data.isSelectedItem())
progressbar.setVisibility(View.VISIBLE);
else
progressbar.setVisibility(View.GONE);
}
return griditem;
}
}
우선 이런식으로 다이얼로그를 상속받아 리스트만 뜨도록 만든후 show()해줘도 널포인터에러로 죽네요...
어떻게 만들어야 될지 잘 모르겠어요..ㅠ
AlbumListData data = null;
/*data 얻는 부분*/
dlg.addItem(data);
dlg.show();
이런식으로 해주고 있습니다..
디버깅으로 확인해 봤는데 AlbumListDialog 클래스의 ArrayList<AlbumListData> grid;<-이 변수가 널로 들어가면서 에러가 나는듯 했습니다... 뭐가 잘못된 걸까요...
또 문제가 AlbumListDialog 클래스에서 onCreate를 타지 않습니다.. 그래서 클래스 생성 부분에 onCreate에서 해준 내용을 넣어줘서 해줬는데.. 위와 같이 grid변수가 널값이 되구요...
다이얼로그를 호출하는 부분 소스도 있으면 도움이 될텐데요.