11package com .xiaofeng .androidlibs ;
22
33import android .content .Intent ;
4+ import android .content .SharedPreferences ;
45import android .graphics .Rect ;
56import android .os .Bundle ;
7+ import android .os .Handler ;
8+ import android .os .Looper ;
9+ import android .preference .PreferenceManager ;
610import android .support .v7 .app .AppCompatActivity ;
711import android .support .v7 .widget .RecyclerView ;
812import android .support .v7 .widget .Toolbar ;
913import android .view .Menu ;
1014import android .view .MenuItem ;
1115import android .view .View ;
12- import android .widget .AdapterView ;
13- import android .widget .ArrayAdapter ;
14- import android .widget .Spinner ;
1516
1617import com .xiaofeng .flowlayoutmanager .Alignment ;
1718import com .xiaofeng .flowlayoutmanager .FlowLayoutManager ;
2122public class MainActivity extends AppCompatActivity {
2223
2324 RecyclerView recyclerView ;
24- Spinner itemPerLineSpinner , alignmentSpinner ;
25- ArrayAdapter <CharSequence > itemsPerLineAdapter , alignmentAdapter ;
2625 FlowLayoutManager flowLayoutManager ;
2726 MarkdownView markdownView ;
27+ private static final int REQ_CODE_SETTINGS = 101 ;
2828 @ Override
2929 protected void onCreate (Bundle savedInstanceState ) {
3030 super .onCreate (savedInstanceState );
@@ -35,42 +35,11 @@ protected void onCreate(Bundle savedInstanceState) {
3535 }
3636
3737 private void init () {
38- itemPerLineSpinner = (Spinner )findViewById (R .id .spinner_items_per_line );
39- itemsPerLineAdapter = ArrayAdapter .createFromResource (this , R .array .item_per_line_options , android .R .layout .simple_spinner_dropdown_item );
40- itemPerLineSpinner .setAdapter (itemsPerLineAdapter );
41- itemPerLineSpinner .setSelection (itemsPerLineAdapter .getPosition (getText (R .string .line_option_no )));
42- itemPerLineSpinner .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
43- @ Override
44- public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
45- updateListBySpinners ();
46-
47- }
48-
49- @ Override
50- public void onNothingSelected (AdapterView <?> parent ) {
51-
52- }
53- });
54-
55- alignmentSpinner = (Spinner )findViewById (R .id .spinner_alignment );
56- alignmentAdapter = ArrayAdapter .createFromResource (this , R .array .alignment_options , android .R .layout .simple_spinner_dropdown_item );
57- alignmentSpinner .setAdapter (alignmentAdapter );
58- alignmentSpinner .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
59- @ Override
60- public void onItemSelected (AdapterView <?> parent , View view , int position , long id ) {
61- updateListBySpinners ();
62- }
63-
64- @ Override
65- public void onNothingSelected (AdapterView <?> parent ) {
66-
67- }
68- });
6938 recyclerView = (RecyclerView ) findViewById (R .id .list );
7039 flowLayoutManager = new FlowLayoutManager ().singleItemPerLine ();
7140 flowLayoutManager .setAutoMeasureEnabled (true );
7241 recyclerView .setLayoutManager (flowLayoutManager );
73- recyclerView .setAdapter (new DemoAdapter (DemoUtil .generate (2000 , 3 , 13 , 1 , false )));
42+ recyclerView .setAdapter (new DemoAdapter (1 , DemoUtil .generate (2000 , 3 , 13 , 1 , false )));
7443 recyclerView .addItemDecoration (new RecyclerView .ItemDecoration () {
7544 @ Override
7645 public void getItemOffsets (Rect outRect , View view , RecyclerView parent , RecyclerView .State state ) {
@@ -81,27 +50,7 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle
8150
8251 markdownView = (MarkdownView )findViewById (R .id .instruction_mdown );
8352 markdownView .loadMarkdownFile ("file:///android_asset/instruction.md" );
84- }
85-
86- private void updateListBySpinners () {
87- CharSequence itemsPerLine = itemsPerLineAdapter .getItem (itemPerLineSpinner .getSelectedItemPosition ());
88- CharSequence alignment = alignmentAdapter .getItem (alignmentSpinner .getSelectedItemPosition ());
89- if (itemsPerLine .equals (getText (R .string .line_option_one ))) {
90- flowLayoutManager .maxItemsPerLine (1 );
91- } else if (itemsPerLine .equals (getText (R .string .line_option_two ))) {
92- flowLayoutManager .maxItemsPerLine (2 );
93- } else if (itemsPerLine .equals (getText (R .string .line_option_three ))) {
94- flowLayoutManager .maxItemsPerLine (3 );
95- } else if (itemsPerLine .equals (getText (R .string .line_option_no ))) {
96- flowLayoutManager .removeItemPerLineLimit ();
97- }
98-
99- if (alignment .equals (getText (R .string .alignment_left ))) {
100- flowLayoutManager .setAlignment (Alignment .LEFT );
101- } else if (alignment .equals (getText (R .string .alignment_right ))) {
102- flowLayoutManager .setAlignment (Alignment .RIGHT );
103- }
104- recyclerView .getAdapter ().notifyItemRangeChanged (0 , recyclerView .getAdapter ().getItemCount ());
53+ loadSettingsFromSharedPref ();
10554 }
10655
10756 @ Override
@@ -113,9 +62,49 @@ public boolean onCreateOptionsMenu(Menu menu) {
11362 @ Override
11463 public boolean onOptionsItemSelected (MenuItem item ) {
11564 if (item .getItemId () == R .id .action_settings ) {
116- startActivity (new Intent (this , SettingsActivity .class ));
65+ startActivityForResult (new Intent (this , SettingsActivity .class ), REQ_CODE_SETTINGS );
11766 return true ;
11867 }
11968 return super .onOptionsItemSelected (item );
12069 }
70+
71+ private void loadSettingsFromSharedPref () {
72+ SharedPreferences sharedPreferences = PreferenceManager .getDefaultSharedPreferences (this );
73+ String itemsPerLineString = sharedPreferences .getString (getResources ().getString (R .string .pref_key_max_items_per_line ), getString (R .string .pref_max_items_per_line_default ));
74+ int itemsPerLine = Integer .valueOf (itemsPerLineString );
75+
76+ String alignmentString = sharedPreferences .getString (getResources ().getString (R .string .pref_key_alignment ), getString (R .string .pref_alignment_default ));
77+ int alignmentInt = Integer .valueOf (alignmentString );
78+ Alignment [] alignments = Alignment .values ();
79+ Alignment selectedAlignment = Alignment .LEFT ;
80+ for (Alignment alignment : alignments ) {
81+ if (alignment .ordinal () == alignmentInt ) {
82+ selectedAlignment = alignment ;
83+ break ;
84+ }
85+ }
86+ // boolean showMeta = sharedPreferences.getBoolean(getString(R.string.pref_key_show_meta), false);
87+
88+ flowLayoutManager .maxItemsPerLine (itemsPerLine );
89+ flowLayoutManager .setAlignment (selectedAlignment );
90+ DemoAdapter demoAdapter = (DemoAdapter )recyclerView .getAdapter ();
91+ // demoAdapter.setShowMeta(showMeta);
92+ String maxLinesPerItemString = sharedPreferences .getString (getString (R .string .pref_key_max_lines_per_item ), getString (R .string .pref_max_lines_per_item_default ));
93+ int maxLinesPerItem = Integer .valueOf (maxLinesPerItemString );
94+ demoAdapter .newItems (maxLinesPerItem , DemoUtil .generate (demoAdapter .getItemCount (), 3 , 13 , maxLinesPerItem , false ));
95+ recyclerView .getAdapter ().notifyItemRangeChanged (0 , recyclerView .getAdapter ().getItemCount ());
96+ }
97+
98+ @ Override
99+ protected void onActivityResult (int requestCode , int resultCode , Intent data ) {
100+ super .onActivityResult (requestCode , resultCode , data );
101+ if (requestCode == REQ_CODE_SETTINGS ) {
102+ new Handler (Looper .getMainLooper ()).postDelayed (new Runnable () {
103+ @ Override
104+ public void run () {
105+ loadSettingsFromSharedPref ();
106+ }
107+ }, 1000 );
108+ }
109+ }
121110}
0 commit comments