안 드 로 이 드 는 recyclerview 를 통 해 전체 표 의 첨삭 검 사 를 진행 하 였 다.
@Override
public List<String> getAllTableName() throws RemoteException {
List<String> result = new ArrayList<>();
Cursor cursor = findBySQL("SELECT name FROM sqlite_master WHERE type='table' order by name");
while (cursor.moveToNext()) {
if (!cursor.getString(cursor.getColumnIndex("name")).trim().equals("android_metadata"))
result.add(cursor.getString(cursor.getColumnIndex("name")));
}
return result;
}
2. 표 이름 으로 표 의 모든 필드 가 져 오기
@Override
public List<String> getFieldByName(String name) throws RemoteException {
List<String> result = new ArrayList<>();
Cursor cursor = findBySQL("pragma table_info(" + name + ")");
while (cursor.moveToNext()) {
result.add(cursor.getString(cursor.getColumnIndex("name")));
}
return result;
}
3. 테이블 이름 으로 데이터 가 져 오기
@Override
public Modern getDataByTableName(String tableName) throws RemoteException {
Modern modern = new Modern();
Map<Integer, List<String>> dataMap = new HashMap<>();
List<String> field = new ArrayList<>();
Cursor cursor = DataSupport.findBySQL("pragma table_info(" + tableName + ")");
while (cursor.moveToNext()) {
field.add(cursor.getString(cursor.getColumnIndex("name")));
}
cursor = DataSupport.findBySQL("select *from " + tableName);
int i = 0;
while (cursor.moveToNext()) {
List<String> data = new ArrayList<>();
for (int itme = 0; itme < field.size(); itme++) {
data.add(cursor.getString(cursor.getColumnIndex(field.get(itme))));
}
dataMap.put(i, data);
Log.d("zw", " i = " + i);
i++;
}
modern.setMap(dataMap);
return modern;
}
4. 표 이름 업데이트 작업 을 통 해 새 데 이 터 를 삽입 합 니 다.
@Override
public void updateData(String tableName, Modern modern) throws RemoteException {
Log.d("zw", "updatedata");
Map> data = modern.getMap();
List field = new ArrayList<>();
Cursor cursor = DataSupport.findBySQL("pragma table_info(" + tableName + ")");
while (cursor.moveToNext()) {
field.add(cursor.getString(cursor.getColumnIndex("name")));//
}
for (int i = 0; i < data.size(); i++) {
cursor = DataSupport.findBySQL("select * from " + tableName + " where id = " + data.get(i).get(0));
if (cursor.moveToNext()) // id
{
ContentValues values = new ContentValues();
for (int s = 0; s < field.size(); s++) {
values.put(field.get(s), data.get(i).get(s));
}
DataSupport.updateAll(tableName, values, field.get(0) + " = ?", data.get(i).get(0) + "");
} else {
Log.d("zw", "insert into ");
SQLiteDatabase sqLiteDatabase = LitePal.getDatabase();//litepal database
ContentValues value = new ContentValues();
for (int c = 0; c < field.size(); c++) {
value.put(field.get(c), data.get(i).get(c));
}
sqLiteDatabase.insert(tableName, null, value);
}
}
}
5. 표 이름과 id 를 통 해 데이터 삭제
@Override
public void deleteData(String tableName, List<String> id) throws RemoteException {
Log.d("zw", "start deleteData");
for (int i = 0; i < id.size(); i++) {
Log.d("zw", " id " + id.get(i));
DataSupport.deleteAll(tableName, "id = ?", id.get(i));
}
}
클 라 이언 트: 1. spinner 에 표 이름 출력 가 져 오기
private void initTableInfo() {
try {
tabNames = mlService.getAllTableName();
if (tabNames != null) {
tabNameAdapter = new StringAdapter(tabNames, getActivity());
spDataTyle.setAdapter(tabNameAdapter);// spDataTyle Spinner
spDataTyle.setSelection(0);
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
2. 테이블 에 있 는 데이터 불 러 오기
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (progressDialog != null)
progressDialog.dismiss();
switch (msg.what) {
case SUCESS:
initFiledInfo();
Map> data = modern.getMap();
if (tableAdapter == null) {
tableAdapter = new TableAdapter(getActivity(), data);
} else {
tableAdapter.setDataToView(data);
}
rvData.setAdapter(tableAdapter);
break;
case FAILURE:
showToast(" ");
break;
case DELETEFAILURE:
break;
case DELETESUCESS:
initTableData();
break;
}
}
};
if (progressDialog == null)
progressDialog = new ProgressDialog(getActivity());
progressDialog.setTitle(" ......");
progressDialog.show();
new Thread() {
@Override
public void run() {
super.run();
try {
filedNames = mlService.getFieldByName(tableName);
modern = mlService.getDataByTableName(tableName);
handler.sendEmptyMessage(SUCESS);
} catch (RemoteException e) {
e.printStackTrace();
handler.sendEmptyMessage(FAILURE);
}
}
}.start();
3. 어댑터
public class TableAdapter extends RecyclerView.Adapter {
private Context context;
private Map> data;
private List pos;
private List checks;
public List getPos() {
return pos;
}
public TableAdapter(Context context, Map> data) {
pos = new ArrayList<>();
checks = new ArrayList<>();
this.context = context;
this.data = data;
for (int i = 0; i < data.size(); i++) {
checks.add(false);
}
}
public void setAllChecked(boolean checked) {
pos.clear();
for (int i = 0; i < checks.size(); i++)
checks.set(i, checked);
if (checked) {
for (int c = 0; c < data.size(); c++) {
pos.add(data.get(c).get(0));
}
}
notifyDataSetChanged();
}
public void addNewDataToView() {
List newData = new ArrayList<>();
for (int i = 0; i < data.get(data.size() - 1).size(); i++) {
if (i == 0) {
String id = (Integer.parseInt(data.get(data.size() - 1).get(0)) + 1) + "";
newData.add(id);
} else {
newData.add("");
}
}
data.put(data.size(), newData);
checks.clear();
for (int i = 0; i < data.size(); i++) {
checks.add(false);
}
notifyDataSetChanged();
}
public void setDataToView(Map> data) {
Log.d("zw", "setDataToView");
this.data.clear();
pos.clear();
this.data.putAll(data);
checks.clear();
for (int i = 0; i < data.size(); i++) {
checks.add(false);
}
notifyDataSetChanged();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.dataitmelayout, parent, false);
return new MyViewHolder(view);
}
public Map> getData() {
return data;//
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.linearLayout.removeAllViews();
final CheckBox checkBox = new CheckBox(getActivity());
checkBox.setBackgroundResource(R.color.colorheadLine);
LinearLayout.LayoutParams checkParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
checkBox.setLayoutParams(checkParams);
checkBox.setChecked(checks.get(position));
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checks.set(position, isChecked);
if (isChecked) {
pos.add(data.get(position).get(0));
} else {
pos.remove(data.get(position).get(0));
}
}
});
holder.linearLayout.addView(checkBox);
final List datas = data.get(position);
for (int i = 0; i < datas.size(); i++) {
String value = datas.get(i);
DataItmeView dataItmeView = new DataItmeView(getActivity(), null);
dataItmeView.setContentValue(value);
if (i == 0)
dataItmeView.setContentEdit(false);
dataItmeView.setBackGroudColor(R.color.colorWhite);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f);
dataItmeView.setLayoutParams(layoutParams);
holder.linearLayout.addView(dataItmeView);
EditText content = dataItmeView.getContentView();
final int finalI = i;
//
content.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
data.get(position).set(finalI, s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
/**
* @return
*/
@Override
public int getItemCount() {
return data.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
LinearLayout linearLayout;
public MyViewHolder(View itemView) {
super(itemView);
linearLayout = (LinearLayout) itemView.findViewById(R.id.linearLayout);
}
}
}
최종 효과 가 어떤 지 모 르 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.