-
Notifications
You must be signed in to change notification settings - Fork 51
Open
Labels
Android / iOS안드로이드 / ios안드로이드 / ios
Milestone
Description
안녕하세요. 단어장 앱을 만들고 있는 diocto입니다.
현재 단어 추가 액티비티를 만들던 중에 문제가 생겨서 질문 드립니다.
커스텀 리스트 뷰를 EditText 두개의 조합으로 만들어서 입력한 값을 DB에 넣으려고 하는데, 어댑터를 구현해서 화면에 getView 메소드를 이용해서 뷰를 보여주는 걸로 알고있습니다. 또 어댑터 클래스는 실제 데이터를 List<Item>
형태로 가지고 있고 보통의 텍스트뷰 형태의 리스트 뷰인 경우 List<Item>
에서 값을 얻어오는 방식인 걸로 알고 있습니다.
그런데 저는 EditText
를 사용해서 ListView
를 만들었는데 이 경우 각 EditText
에 사용자가 입력한 값을 어떻게 가져올수 있나요? 즉, 해당 EditText
객체를 id 검색으로 찾아오면 되는 것이여서 ListViewActivity
쪽에서 adapter
멤버를 관리하면서 adapter.getView(int i, View convertView, ViewGroup parent)
를 호출하면 되지 않을까 싶었지만 인자로 View를 줘야 하는데 이 인자가 제가 원하는 값이고.. 검색도 해보고 고민도 해보고 코딩을 해봐도 null값이 나와서 질문드립니다.
ListView
에 있는 EditText
객체를 어떻게 얻어올 수 있나요?
아래는 어댑터와 리스트뷰 액티비티 코드입니다.
public class AddWGListViewAdpater extends BaseAdapter {
private ArrayList<AddWGListViewItem> listView ;
private Context context;
final static int IS_CLICKED_ONCE = 0;
final static int IS_NOT_CLICKED = 1;
public AddWGListViewAdpater(Context context, ArrayList<AddWGListViewItem> listView) {
this.listView = listView;
this.context = context;
}
@Override
public int getCount() {
return listView.size();
}
@Override
public AddWGListViewItem getItem(int i) {
return listView.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup parent) {
final int pos = i;
final Context context = parent.getContext();
if (convertView == null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.word_add_listview_item,parent,false);
}
return convertView;
}
public void addBottomEditText(View view){
if(view == null)
{
Log.d("user","view is null");
return;
}
else
{
Log.d("user",view.toString());
}
if(view.getTag() == null) {
Log.d("user","view tag is null");
view.setTag(IS_CLICKED_ONCE);
addEditText();
notifyDataSetChanged();
}
}
public void addEditText()
{
AddWGListViewItem newItem = new AddWGListViewItem();
listView.add(newItem);
}
}
public class AddWordGruopActivity extends AppCompatActivity {
Button cancelButton;
Button addWGButton;
AddWGListViewAdpater adapter;
ListView listview;
ArrayList<AddWGListViewItem> itemList = new ArrayList<>();
public static int addNum = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_word_gruop);
listview = findViewById(R.id.addWordListView);
adapter = new AddWGListViewAdpater(this,itemList);
listview.setAdapter(adapter);
cancelButton = findViewById(R.id.cancelAddButton);
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
addWGButton = findViewById(R.id.addWGToDBButton);
for(int i = 0; i < 10 ;i ++)
{
adapter.addEditText();
}
}
public void onclickedOnce(View view){
Log.i("addLod","once Clicked!!!!!!");
adapter.addBottomEditText(view);
}
public void onClickAddWGButton(View view)
{
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
String today = dateFormat.format(date);
SQLiteDatabase db;
try{
db = openOrCreateDatabase("vocabularyDataBase",MODE_PRIVATE,null);
} catch(Exception ex)
{
ex.printStackTrace();
return;
}
String subSQL = "insert into word(value, meaning, correct_answer_num, incorrect_answer_num, group_name)";
for (int i = 0; i < adapter.getCount(); i++)
{
String wordView = adapter.getItem(i).getWord();
String meaingView = adapter.getItem(i).getWordsMeaning();
try{
if(wordView != null && meaingView !=null)
db.execSQL(subSQL + "values ('" +wordView +"', '" + meaingView +"', 0, 0, " + Integer.toString(addNum) +")");
} catch(Exception ex)
{
ex.printStackTrace();
return;
}
}
String values[] = {Integer.toString(addNum++), today, "0"};
try{
db.execSQL("insert into word_group(group_name, registered_data, num_of_test) values(?, ?, ?)",values);
Toast.makeText(this,"단어 추가가 완료되었습니다", Toast.LENGTH_LONG).show();
}catch (Exception ex)
{
Log.d("sqlerror",ex.toString());
}
finish();
return;
}
}
Metadata
Metadata
Assignees
Labels
Android / iOS안드로이드 / ios안드로이드 / ios