· 10 years ago · Aug 26, 2016, 09:48 PM
1public class LvCaActivity extends AppCompatActivity {
2
3 private SimpleCursorAdapter dataAdapter;
4 private DbAdapter dbHelper;
5
6 @Override
7 public void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.activity_lv_ca);
10
11 dbHelper = new DbAdapter(this);
12 dbHelper.open();
13 dbHelper.deleteAll();
14 dbHelper.insertSome();
15
16 Cursor bCursor = dbHelper.fetchAll(DbAdapter.bColumns);
17
18 dataAdapter = new MySimpleCursorAdapter(
19 this, R.layout.b_item,
20 bCursor,
21 DbAdapter.bColumns,
22 ViewHolder.viewsArray,
23 0);
24
25 ListView listView = (ListView) findViewById(R.id.listView1);
26
27 listView.setAdapter(dataAdapter);
28
29 }
30}
31
32<?xml version="1.0" encoding="utf-8"?>
33<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
34 android:layout_width="fill_parent" android:layout_height="fill_parent"
35 android:orientation="vertical">
36
37 <ListView android:id="@+id/listView1" android:layout_width="fill_parent"
38 android:layout_height="fill_parent" />
39
40</LinearLayout>
41
42<?xml version="1.0" encoding="utf-8"?>
43<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
44 android:layout_width="fill_parent"
45 android:layout_height="wrap_content"
46 android:orientation="vertical"
47 android:padding="6dip"
48 android:id="@+id/b_item_layout">
49
50 <TextView
51 android:id="@+id/bName"
52 android:layout_width="wrap_content"
53 android:layout_height="wrap_content"
54 android:layout_alignParentLeft="true"
55 android:layout_alignParentTop="true"
56 android:textAppearance="?android:attr/textAppearanceListItem"
57 android:ellipsize="end"
58 android:singleLine="true"
59 android:paddingTop="30dp"/>
60
61 <TextView
62 android:id="@+id/bSecondLine"
63 android:layout_width="wrap_content"
64 android:layout_height="wrap_content"
65 android:layout_below="@+id/bName"
66 android:textAppearance="?android:attr/textAppearanceSmall" />
67
68 <TextView
69 android:id="@+id/bDbItem"
70 android:layout_width="wrap_content"
71 android:layout_height="match_parent"
72 android:visibility="gone"
73 />
74 <TextView
75 android:id="@+id/bHidden"
76 android:layout_width="wrap_content"
77 android:layout_height="match_parent"
78 android:visibility="gone"
79 />
80
81</RelativeLayout>
82
83<?xml version="1.0" encoding="utf-8"?>
84<manifest package="com.company.cpp.lvcaapp"
85 xmlns:android="http://schemas.android.com/apk/res/android">
86
87 <application
88 android:allowBackup="true"
89 android:icon="@mipmap/ic_launcher"
90 android:label="@string/app_name"
91 android:supportsRtl="true"
92 android:theme="@style/AppTheme">
93 <activity android:name=".LvCaActivity">
94 <intent-filter>
95 <action android:name="android.intent.action.MAIN"/>
96
97 <category android:name="android.intent.category.LAUNCHER"/>
98 </intent-filter>
99 </activity>
100 </application>
101
102</manifest>
103
104public class DbAdapter {
105
106 private static final String TAG = "DbAdapter";
107 private DatabaseHelper mDbHelper;
108 private SQLiteDatabase mDb;
109
110 private static final String DATABASE_NAME = "adbname";
111 private static final String SQLITE_TABLE = "atablename";
112 private static final int DATABASE_VERSION = 1;
113
114 private final Context mCtx;
115
116 public static final String[] bColumns = new String[] {
117 "_id",
118 "NAME",
119 "SECOND_LINE",
120 "HIDDEN",
121 };
122
123 private static final String DATABASE_CREATE =
124 "CREATE TABLE if not exists " + SQLITE_TABLE + " (" +
125 "_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
126 "NAME TEXT, " +
127 "SECOND_LINE, " +
128 "HIDDEN" +
129 ");";
130
131 private static class DatabaseHelper extends SQLiteOpenHelper {
132 DatabaseHelper(Context context) {
133 super(context, DATABASE_NAME, null, DATABASE_VERSION);
134 }
135
136 @Override
137 public void onCreate(SQLiteDatabase db) {
138 Log.w(TAG, DATABASE_CREATE);
139 db.execSQL(DATABASE_CREATE);
140 }
141
142 @Override
143 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
144 Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
145 + newVersion + ", which will destroy all old data");
146 db.execSQL("DROP TABLE IF EXISTS " + SQLITE_TABLE);
147 onCreate(db);
148 }
149 }
150
151 public DbAdapter(Context ctx) {
152 this.mCtx = ctx;
153 }
154
155 public DbAdapter open() throws SQLException {
156 mDbHelper = new DatabaseHelper(mCtx);
157 mDb = mDbHelper.getWritableDatabase();
158 return this;
159 }
160
161 public void close() {
162 if (mDbHelper != null) {
163 mDbHelper.close();
164 }
165 }
166 public Cursor fetchAll(String[] fields) {
167 Cursor mCursor = mDb.query(SQLITE_TABLE, fields, null, null, null, null, null);
168 if (mCursor != null) {
169 mCursor.moveToFirst();
170 }
171 return mCursor;
172 }
173
174 public void insertSome() {
175 AListItem.getInstance();
176 String sampleData = "[{"name":"Entry 1","second_line":"Second Line 1","hidden":"F"},{"name":"Entry 2","second_line":"Second Line 2","hidden":"F"},{"name":"Entry 3","second_line":"Second Line 3","hidden":"F"},{"name":"Entry 4","second_line":"Second Line 4","hidden":"F"},{"name":"EntryH 5","second_line":"Second Line 5","hidden":"T"},{"name":"Entry 6","second_line":"Second Line 6","hidden":"F"},{"name":"Entry 7","second_line":"Second Line 7","hidden":"F"},{"name":"Entry 8","second_line":"Second Line 8","hidden":"F"},{"name":"Entry 9","second_line":"Second Line 9","hidden":"F"},{"name":"EntryH 10","second_line":"Second Line 10","hidden":"T"},{"name":"Entry 11","second_line":"Second Line 11","hidden":"F"},{"name":"Entry 12","second_line":"Second Line 12","hidden":"F"},{"name":"Entry 13","second_line":"Second Line 13","hidden":"F"},{"name":"Entry 14","second_line":"Second Line 14","hidden":"F"},{"name":"EntryH 15","second_line":"Second Line 15","hidden":"T"},{"name":"Entry 16","second_line":"Second Line 16","hidden":"F"},{"name":"Entry 17","second_line":"Second Line 17","hidden":"F"},{"name":"Entry 18","second_line":"Second Line 18","hidden":"F"},{"name":"Entry 19","second_line":"Second Line 19","hidden":"F"},{"name":"EntryH 20","second_line":"Second Line 20","hidden":"T"},{"name":"Entry 21","second_line":"Second Line 21","hidden":"F"},{"name":"Entry 22","second_line":"Second Line 22","hidden":"F"},{"name":"Entry 23","second_line":"Second Line 23","hidden":"F"}]";
177 String[] items = sampleData.split("\},\{");
178 for(String item: items){
179 AListItem.clear();
180 AListItem.load(item);
181 if(AListItem.getName().contains("Hide")){
182 AListItem.setHidden("T");
183 }
184
185 mDb.insert(SQLITE_TABLE, null, AListItem.getContentValues());
186
187 ContentValues values = AListItem.getContentValues();
188 Log.v(TAG, "values.toString()" + values.toString());
189 }
190 }
191
192 public boolean deleteAll() {
193 int doneDelete = 0;
194 doneDelete = mDb.delete(SQLITE_TABLE, null , null);
195 Log.w(TAG, Integer.toString(doneDelete));
196 return doneDelete > 0;
197 }
198}
199
200public class AListItem {
201
202 static String rawInputString;
203
204 static String name;
205 static String second_line;
206 static String hidden;
207
208 static AListItem aListItem;
209
210 private AListItem() {
211 }
212
213 public static AListItem getInstance(){
214 if (aListItem == null) {
215 aListItem = new AListItem();
216 }
217 return aListItem;
218 }
219
220 public static void clear() {
221 rawInputString = null;
222 name = null;
223 second_line = null;
224 hidden = null;
225 }
226
227 public static ContentValues getContentValues() {
228 ContentValues values = new ContentValues();
229 values.put("NAME", name);
230 values.put("SECOND_LINE", second_line);
231 values.put("HIDDEN", hidden);
232 return values;
233 }
234
235
236 public static void load(String string) {
237 StringBuffer buf = new StringBuffer(string);
238 if (buf.substring(0,2).equals("[{")){
239 buf.delete(0,2);
240 }
241 rawInputString = buf.toString();
242 parse();
243 }
244
245 public static void parse() {
246
247 if (rawInputString == null) {
248 System.out.println("nothing to parse");
249 return;
250 }
251
252 rawInputString = rawInputString.replaceAll(""\:null,", ""\:"null",");
253 String[] nvpa = rawInputString.split("","");
254 for (String nvpString : nvpa) {
255 String[] nvpItem = nvpString.split("":"");
256 if (nvpItem.length < 2) continue;
257 String identifier = nvpItem[0].replaceAll(""", "");
258 String content = nvpItem[1].replaceAll(""", "");
259
260 switch (identifier) {
261 case "name":
262 setName(content);
263 break;
264 case "second_line":
265 setSecond_line(content);
266 break;
267 case "hidden":
268 setHidden(content);
269 break;
270 default:
271 System.out.println("nowhere to put [" + nvpItem[0] + "] " + nvpString + " raw: " + rawInputString);
272 break;
273 }
274 }
275 }
276
277 public static String getName() {
278 return name;
279 }
280
281 public static void setName(String name) { AListItem.name = name; }
282
283 public static void setSecond_line(String second_line) {
284 AListItem.second_line = second_line;
285 }
286
287 public static String getSecond_line() {
288 return second_line;
289 }
290
291 public static void setHidden(String hidden) {
292 AListItem.hidden = hidden;
293 }
294
295 public static String getHidden() {
296 return hidden;
297 }
298
299 public String toString() {
300 return getName() + ", " +
301 getSecond_line() + ", " +
302 getHidden();
303 }
304
305}
306
307public class MySimpleCursorAdapter extends SimpleCursorAdapter {
308
309 Context context;
310 Cursor cursor;
311 public static final String TAG = "MySimpleCursorAdapter";
312
313 public MySimpleCursorAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to, int flags) {
314 super(context, layout, cursor, from, to, flags);
315 this.context = context;
316 this.cursor = cursor;
317 }
318
319 @Override
320 public View getView(int position, View convertView, ViewGroup parent) {
321 Log.v(TAG,"getView() >>>>>>STARTING");
322
323 ViewHolder viewHolder;
324 LayoutInflater inflater = LayoutInflater.from(context);
325 if (null == convertView || null == convertView.getTag()) {
326 convertView = inflater.inflate(R.layout.b_item, null);
327 viewHolder = new ViewHolder(convertView);
328 } else {
329 viewHolder = (ViewHolder) convertView.getTag();
330 }
331
332 for (int i = 0; i < cursor.getColumnCount(); i++) {
333 Log.v(TAG, "getView cursor " + i + ": " + cursor.getString(i));
334 }
335
336 String hidden = cursor.getString(ViewHolder.HIDDEN);
337 if (hidden == null) hidden = "F";
338 Log.v(TAG,"Hidden State: " + hidden);
339 switch (hidden) {
340 case "F":
341 break;
342 case "T":
343 Log.v(TAG,">>>>>Hidden was TRUE<<<<<<<: " + cursor.getString(ViewHolder.NAME));
344 viewHolder.hideSecondLine();
345 break;
346 }
347
348 convertView.setTag(viewHolder);
349 View returnView = super.getView(position, convertView, parent);
350
351 Log.v(TAG,"getView() ENDING<<<<<<<<<");
352
353 return returnView;
354 }
355}
356
357class ViewHolder {
358
359 public static final String TAG = "ViewHolder";
360
361 public static final int DB_ITEM = 0;
362 public static final int NAME = 1;
363 public static final int SECOND_LINE = 2;
364 public static final int HIDDEN = 3;
365
366 public static final int[] viewsArray = new int[] {
367 R.id.bDbItem,
368 R.id.bName,
369 R.id.bSecondLine,
370 R.id.bHidden,
371 };
372
373 public static final TextView[] textViewArray = new TextView[viewsArray.length];
374
375 public ViewHolder( final View root ) {
376 Log.v(TAG, "ViewHolder constructor");
377 for (int i = 0; i < viewsArray.length; i++) {
378 textViewArray[i] = (TextView) root.findViewById(viewsArray[i]);
379 Log.v(TAG, " textViewArray[" + i + "]: " + textViewArray[i]);
380 }
381 }
382
383 public void hideSecondLine() {
384 textViewArray[SECOND_LINE].setVisibility(View.INVISIBLE);
385 }
386}