Skip to content

Commit 544dddf

Browse files
committed
12
1 parent e0fb23f commit 544dddf

14 files changed

Lines changed: 400 additions & 41 deletions

CriminalIntent/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
</intent-filter>
1818
</activity>
1919
<activity android:name=".CrimeActivity" />
20+
<activity android:name=".CrimePagerActivity" />
2021
</application>
2122

2223
</manifest>

CriminalIntent/src/main/java/com/pyn/criminalintent/Crime.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class Crime {
1414
private Date mDate;
1515
private boolean mSolved;
1616
/* 是否需警方介入 */
17-
private boolean mRequiresPolice;
17+
private boolean mRequiresPolice = false;
1818

1919
public Crime() {
2020
// 产生一个随机唯一ID值
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
package com.pyn.criminalintent;
22

3+
import android.content.Context;
4+
import android.content.Intent;
35
import android.support.v4.app.Fragment;
46

7+
import java.util.UUID;
8+
59
public class CrimeActivity extends SingleFragmentActivity {
610

11+
private static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id";
12+
713
@Override
814
protected Fragment createFragment() {
9-
return new CrimeFragment();
15+
16+
UUID crimeId = (UUID) getIntent().getSerializableExtra(EXTRA_CRIME_ID);
17+
return CrimeFragment.newInstance(crimeId);
1018
}
1119

20+
public static Intent newIntent(Context packageContext, UUID crimeId) {
21+
Intent intent = new Intent(packageContext, CrimeActivity.class);
22+
intent.putExtra(EXTRA_CRIME_ID, crimeId);
23+
return intent;
24+
}
1225
}

CriminalIntent/src/main/java/com/pyn/criminalintent/CrimeFragment.java

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.pyn.criminalintent;
22

3+
import android.app.Activity;
4+
import android.content.Intent;
35
import android.os.Bundle;
46
import android.support.v4.app.Fragment;
57
import android.support.v4.app.FragmentManager;
@@ -13,32 +15,45 @@
1315
import android.widget.CompoundButton;
1416
import android.widget.EditText;
1517

18+
import java.io.BufferedWriter;
19+
import java.util.Date;
20+
import java.util.UUID;
21+
1622
public class CrimeFragment extends Fragment {
1723

24+
private static final String ARG_CRIME_ID = "crime_id";
25+
private static final String DIALOG_DATE = "DialogDate";
26+
private static final int REQUEST_DATE = 0;
27+
1828
private Crime mCrime;
1929
private EditText edtTitleField;
2030
private Button btnDate;
2131
private CheckBox cboxSolved;
2232

23-
public CrimeFragment() {
24-
}
33+
public static CrimeFragment newInstance(UUID crimeId) {
34+
35+
Bundle args = new Bundle();
36+
args.putSerializable(ARG_CRIME_ID, crimeId);
2537

26-
public static CrimeFragment newInstance(String param1, String param2) {
2738
CrimeFragment fragment = new CrimeFragment();
39+
fragment.setArguments(args);
2840
return fragment;
2941
}
3042

3143
@Override
3244
public void onCreate(Bundle savedInstanceState) {
3345
super.onCreate(savedInstanceState);
34-
mCrime = new Crime();
46+
47+
UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
48+
mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);
3549
}
3650

3751
@Override
3852
public View onCreateView(LayoutInflater inflater, ViewGroup container,
3953
Bundle savedInstanceState) {
4054
View v = inflater.inflate(R.layout.fragment_crime, container, false);
4155
edtTitleField = v.findViewById(R.id.crime_title);
56+
edtTitleField.setText(mCrime.getTitle());
4257
edtTitleField.addTextChangedListener(new TextWatcher() {
4358
@Override
4459
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -47,7 +62,7 @@ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
4762

4863
@Override
4964
public void onTextChanged(CharSequence s, int start, int before, int count) {
50-
mCrime.setTitle(toString());
65+
mCrime.setTitle(s.toString());
5166
}
5267

5368
@Override
@@ -56,18 +71,45 @@ public void afterTextChanged(Editable s) {
5671
}
5772
});
5873
btnDate = v.findViewById(R.id.crime_date);
59-
btnDate.setEnabled(false);
74+
updateDate(btnDate, mCrime);
75+
btnDate.setOnClickListener(new View.OnClickListener() {
76+
@Override
77+
public void onClick(View v) {
78+
FragmentManager fragmentManager = getFragmentManager();
79+
DatePickerFragment dialog = DatePickerFragment.newInstance(mCrime.getDate());
80+
dialog.setTargetFragment(CrimeFragment.this, REQUEST_DATE);
81+
dialog.show(fragmentManager, DIALOG_DATE);
82+
}
83+
});
6084

6185
cboxSolved = v.findViewById(R.id.crime_solved);
86+
cboxSolved.setChecked(mCrime.isSolved());
6287
cboxSolved.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
6388
@Override
6489
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
6590
mCrime.setSolved(isChecked);
6691
}
6792
});
93+
6894
return v;
6995
}
7096

97+
@Override
98+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
99+
if (resultCode != Activity.RESULT_OK){
100+
return;
101+
}
102+
if (requestCode == REQUEST_DATE){
103+
Date date = (Date) data.getSerializableExtra(DatePickerFragment.EXTRA_DATE);
104+
mCrime.setDate(date);
105+
updateDate(btnDate, mCrime);
106+
}
107+
}
108+
109+
private static void updateDate(Button btnDate, Crime crime) {
110+
btnDate.setText(crime.getDate().toString());
111+
}
112+
71113
@Override
72114
public void onDetach() {
73115
super.onDetach();

CriminalIntent/src/main/java/com/pyn/criminalintent/CrimeLab.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import android.content.Context;
44

55
import java.util.ArrayList;
6+
import java.util.LinkedHashMap;
67
import java.util.List;
8+
import java.util.Map;
79
import java.util.UUID;
810

911
/**
@@ -12,7 +14,7 @@
1214
public class CrimeLab {
1315

1416
private static CrimeLab sCrimeLab;
15-
private List<Crime> mCrimes;
17+
private Map<UUID, Crime> mCrimes;
1618

1719
public static CrimeLab get(Context context) {
1820
if (sCrimeLab == null) {
@@ -22,30 +24,25 @@ public static CrimeLab get(Context context) {
2224
}
2325

2426
private CrimeLab(Context context) {
25-
mCrimes = new ArrayList<>();
27+
mCrimes = new LinkedHashMap<>();
2628
for (int i = 0; i < 100; i++) {
2729
Crime crime = new Crime();
2830
crime.setTitle("Crime #" + i);
2931
crime.setSolved(i % 2 == 0);
30-
mCrimes.add(crime);
32+
mCrimes.put(crime.getId(), crime);
3133
}
3234
Crime crime = new Crime();
3335
crime.setTitle("Crime # 101");
3436
crime.setSolved(false);
3537
crime.setRequiresPolice(true);
36-
mCrimes.add(crime);
38+
mCrimes.put(crime.getId(), crime);
3739
}
3840

3941
public List<Crime> getCrimes() {
40-
return mCrimes;
42+
return new ArrayList<>(mCrimes.values());
4143
}
4244

4345
public Crime getCrime(UUID id) {
44-
for (Crime crime : mCrimes) {
45-
if (crime.getId().equals(id)) {
46-
return crime;
47-
}
48-
}
49-
return null;
46+
return mCrimes.get(id);
5047
}
5148
}

CriminalIntent/src/main/java/com/pyn/criminalintent/CrimeListFragment.java

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
package com.pyn.criminalintent;
22

3+
import android.content.Intent;
34
import android.os.Bundle;
45
import android.support.annotation.Nullable;
56
import android.support.v4.app.Fragment;
67
import android.support.v7.widget.LinearLayoutManager;
78
import android.support.v7.widget.RecyclerView;
9+
import android.util.Log;
810
import android.view.LayoutInflater;
911
import android.view.View;
1012
import android.view.ViewGroup;
1113
import android.widget.Button;
14+
import android.widget.ImageView;
1215
import android.widget.TextView;
1316
import android.widget.Toast;
1417

18+
import java.text.DateFormat;
19+
import java.text.SimpleDateFormat;
1520
import java.util.List;
21+
import java.util.Locale;
1622

1723
/**
1824
* Created by pengyanni on 2018/2/9.
@@ -21,6 +27,7 @@ public class CrimeListFragment extends Fragment {
2127

2228
private RecyclerView mCrimeRecyclerView;
2329
private CrimeAdapter mAdapter;
30+
// private int currentPosition = -1;
2431

2532
public enum ITEM_TYPE {
2633
ITEM_TYPE_STANDARD,
@@ -41,63 +48,93 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
4148
return view;
4249
}
4350

51+
@Override
52+
public void onResume() {
53+
super.onResume();
54+
updateUI();
55+
}
56+
4457
/**
4558
* 更新UI
4659
*/
4760
private void updateUI() {
4861
CrimeLab crimeLab = CrimeLab.get(getActivity());
4962
List<Crime> crimes = crimeLab.getCrimes();
5063

51-
mAdapter = new CrimeAdapter(crimes);
52-
mCrimeRecyclerView.setAdapter(mAdapter);
64+
if (mAdapter == null) {
65+
mAdapter = new CrimeAdapter(crimes);
66+
mCrimeRecyclerView.setAdapter(mAdapter);
67+
} else {
68+
// if (currentPosition != -1) {
69+
// mAdapter.notifyItemChanged(currentPosition);
70+
// } else {
71+
mAdapter.notifyDataSetChanged();
72+
// }
73+
}
5374
}
5475

5576
private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
5677

5778
private TextView tvTitle, tvDate;
5879
private Crime mCrime;
80+
private ImageView imgSolved;
5981

6082
public CrimeHolder(LayoutInflater inflater, ViewGroup parent) {
6183
super(inflater.inflate(R.layout.list_item_crime, parent, false));
6284
itemView.setOnClickListener(this);
6385

6486
tvTitle = itemView.findViewById(R.id.crime_title);
6587
tvDate = itemView.findViewById(R.id.crime_date);
88+
imgSolved = itemView.findViewById(R.id.crime_solved);
89+
6690
}
6791

6892
public void bind(Crime crime) {
6993
mCrime = crime;
7094
tvTitle.setText(mCrime.getTitle());
71-
tvDate.setText(mCrime.getDate().toString());
95+
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.ENGLISH);
96+
tvDate.setText(dateFormat.format(mCrime.getDate()));
97+
imgSolved.setVisibility(crime.isSolved() ? View.VISIBLE : View.GONE);
7298
}
7399

74100
@Override
75101
public void onClick(View v) {
76-
Toast.makeText(getActivity(),
77-
mCrime.getTitle() + " clicked!", Toast.LENGTH_SHORT)
78-
.show();
102+
Intent intent = CrimePagerActivity.newIntent(getActivity(), mCrime.getId());
103+
// currentPosition = this.getAdapterPosition();
104+
startActivity(intent);
79105
}
80106
}
81107

82-
private class CrimePoliceHolder extends RecyclerView.ViewHolder {
108+
private class CrimePoliceHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
83109

84110
private TextView tvTitle, tvDate;
85111
private Button btnPolice;
86112
private Crime mCrime;
113+
private ImageView imgSolved;
87114

88115
public CrimePoliceHolder(LayoutInflater inflater, ViewGroup parent) {
89116
super(inflater.inflate(R.layout.list_item_crime, parent, false));
117+
itemView.setOnClickListener(this);
90118

91119
tvTitle = itemView.findViewById(R.id.crime_title);
92120
tvDate = itemView.findViewById(R.id.crime_date);
93121
btnPolice = itemView.findViewById(R.id.crime_police);
122+
imgSolved = itemView.findViewById(R.id.crime_solved);
94123
btnPolice.setVisibility(View.VISIBLE);
95124
}
96125

97126
public void bind(Crime crime) {
98127
mCrime = crime;
99128
tvTitle.setText(mCrime.getTitle());
100129
tvDate.setText(mCrime.getDate().toString());
130+
imgSolved.setVisibility(crime.isSolved() ? View.VISIBLE : View.GONE);
131+
}
132+
133+
@Override
134+
public void onClick(View v) {
135+
Intent intent = CrimePagerActivity.newIntent(getActivity(), mCrime.getId());
136+
// currentPosition = this.getAdapterPosition();
137+
startActivity(intent);
101138
}
102139
}
103140

0 commit comments

Comments
 (0)