infoFragment에서 추가버튼 클릭으로 inputFragment로 전환 후
inputFragment 에서 선택한 값을 infoFragment 에 뿌려주려 하고 있습니다
inputFragment에서 날짜와 거리는 무조건 입력되고 checkbox를 이용하여 3가지 리스트 중 선택된 값만
저장 버튼 클릭 시 insertColumn 으로 ListDB에 저장하고 infoFragment로 화면 전환하여 표시하게 하고 싶습니다
inputFragment
날짜 (무조건 저장) |
거리 (무조건 저장) |
체크박스 |
aaa (체크 되면 1로저장) |
체크박스 |
bbb (체크 되지 않으면 0으로저장) |
체크박스 |
ccc |
일단 날짜와 거리는 무조건 입력되는 값이기에 adapter_info.xml에 TextView를 만들어 놓았으며
DB에서 읽어와 SetText하였고 aaa, bbb, ccc 항목은 DB에 1 값이 들어 있을 때만 TextView를
동적으로 생성하여 날짜와 거리 아래에 붙여 하나의 항목을 표시하고 싶습니다
근데 처음 aaa 체크 후 저장하면 1개가 잘 보여지나
항목 추가를 위해 추가 버튼 클릭 후 bbb만 선택하여 저장 시 분명 bbb만 선택을 하였고 값도 bbb만 들어간 것을
확인하였음에도 첫번째 리스트에 bbb가 추가되어 보여집니다
다시 ccc만 추가를 하여도 bbb항목아래 ccc가 추가되고 마찬가지로 첫번째 리스트에까지 ccc가 추가되어 첫번째 항목이
3개로 표시되는 문제가 있습니다 3개가 첫번째 리스트에 모두 추가가 되고 난 이후엔 문제없이 선택 된 값만
리스트에 추가되어 표시를 하고 있습니다
어떻게 해줘야 선택된 값만 표시가 되는건지 도통 감이 잡히지를 않네요... addview 를 하는게 문제인것 같은데
아무리 검색을 해봐도 해결법을 찾지 못하겠습니다...
infoFragment.java
public class InfoFragment extends ListFragment {
private Button m_btnAdd;
private ListDbHelper mListDbHelper;
private ListDTO mListDTO;
private Cursor mListCursor;
private ListDataAdapter mdAdapter;
private static ArrayList<ListDTO> listArray;
public static InfoFragment newInstance() {
InfoFragment fragment = new InfoFragment(listArray);
return fragment;
}
public InfoFragment(ArrayList<ListDTO> listArray) {
this.listArray = listArray;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_info,
container, false);
m_btnAdd = (Button) view.findViewById(R.id.add);
return view;
}
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
mListDbHelper = new ListDbHelper(getActivity());
mListDbHelper.open();
listArray = new ArrayList<ListDTO>();
getDbList();
mdAdapter = new ListDataAdapter(getActivity(), listArray);
setListAdapter(mdAdapter);
m_btnAdd.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container, InputFragment.newInstance()).commit();
}
});
}
public void getDbList(){
int cnt = 0;
mListCursor = mListDbHelper.getAllColumns();
while (mListCursor.moveToNext()) {
mListDTO = new ListDTO(mListCursor.getString(mListCursor.getColumnIndex("listdate")),mListCursor.getInt(mListCursor.getColumnIndex("listdistance")),
mListCursor.getInt(mListCursor.getColumnIndex("listaaa")),mListCursor.getInt(mListCursor.getColumnIndex("listbbb")),mListCursor.getInt(mListCursor.getColumnIndex("listccc")));
cnt++;
if (cnt > listArray.size())
listArray.add(mListDTO);
}
}
}
ListDbHelper.java
public class ListDbHelper {
private static SQLiteDatabase mDB;
public long insertColumn(String listdate, int listdistance,
int listaaa, int listbbb, int listccc) {
ContentValues values = new ContentValues();
values.put("listdate", listdate);
values.put("listdistance", listdistance);
values.put("listaaa", listaaa);
values.put("listbbb", listbbb);
values.put("listccc", listccc);
return mDB.insert(TABLE_NAME, null, values);
}
public Cursor getAllColumns() {
return mDB.query(TABLE_NAME, null, null, null, null, null, null);
}
}
ListDTO.java
public class ListDTO {
private String listdate;
private int listdistance;
private int listaaa;
private int listbbb;
private int listccc;
public ListDTO(String listdate, int listdistance, int listaaa, int listbbb,
int listccc) {
super();
this.listdate = listdate;
this.listdistance = listdistance;
this.listaaa = listaaa;
this.listbbb = listbbb;
this.listccc = listccc;
}
public String getListdate() {
return listdate;
}
.....
}
ListDataAdapter.java
public class ListDataAdapter extends ArrayAdapter<ListDTO> {
private final LayoutInflater mInflater;
public ListDataAdapter(Context context, ArrayList<ListDTO> array) {
super(context, 0, array);
String service = Context.LAYOUT_INFLATER_SERVICE;
mInflater = (LayoutInflater) context.getSystemService(service);
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.adapter_info, null);
holder = new ViewHolder();
holder.nTextDate = (TextView) convertView.findViewById(R.id.date);
holder.nTextDistance = (TextView) convertView.findViewById(R.id.distance);
holder.topLL = (LinearLayout) convertView.findViewById(R.id.linearlayout);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final ListDbHelper mListDbHelper = new ListDbHelper(convertView.getContext());
final ListDTO mListDTO = this.getItem(position);
holder.nTextDate.setText(mListDTO.getListdate());
holder.nTextDistance.setText(String.valueOf(mListDTO.getListdistance()));
if(1 == mListDTO.getListaaa())
{
if(holder.aaa == null) {
holder.aaa = new TextView(convertView.getContext());
holder.aaa.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
holder.aaa.setText("Textaaa");
holder.topLL.addView(holder.aaa);
}
}
if(1 == mListDTO.getListbbb())
{ a 와 동일 }
if(1 == mListDTO.getListccc())
{ a 와 동일 }
return convertView;
}
private static class ViewHolder {
public LinearLayout topLL;
public TextView nTextDate;
public TextView nTextDistance;
public TextView aaa;
public TextView bbb;
public TextView ccc;
}
}