标签:监听 view ica uuid 生成 lis state 错误 str
一款功能强大的App
先介绍下吧:CriminalIntent是一款可以帮助改善生活的app,对于记性不太好的同学应该挺有用的哈。功能很强大,比如:
(1)记录某天某时需要做的事情、可以添加很多很多日期,所以不必担心自己会忘记很多事了。
(2)软件里的排序清晰,可以在事件里添加愉快、卡哇伊的表情哦,所以看起来不会那么的单调。
(3)事件记录通过日期自动排序,进入事件明细里,还可以进行愉悦的滑动操作,看着有趣而且不会闷哦。
APP效果图预览
看起来很炫酷吧,强大到还能添加图片与联系人。不过,我通过完成了7到11章的代码编写与调试,只完成了事件记录和滑动,还未实现通知及联系人的功能。下面是我的魅族手机的app动态效果图:
看起来效果还不错吧!
下面我总结下这五章讲述的内容,便于大家的理解:
第7章:项目初步搭建mvc模式,fragment的介绍,生命周期,托管方式,使用fragment的理由。
第8章:Crimefragment界面升级,水平模式布局。
第9章:创建单例CrimeLab(容纳Crime对象),抽象activity类,RecycleView使用,相应点击时间。
第10章:fragment数据传递—fragment argument,刷新RecycleView,通过fragment获取返回结果。
第11章:Viewpager使用,FragmentStatePagerAdapter与FragmentPagerAdapter。
在完成编码的途中,问题和注意点也遇到了不少:
package edu.niit.software.criminalintent; import android.content.Context; import android.content.Intent; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import java.util.UUID; public class CrimeActivity extends SingleFragmentActivity { private static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id"; public static Intent newIntent(Context packageContext , UUID crimeId){ Intent intent = new Intent(packageContext,CrimeActivity.class); intent.putExtra(EXTRA_CRIME_ID , crimeId); return intent; } @Override protected Fragment createFragment() { UUID crimeId = (UUID) getIntent().getSerializableExtra(EXTRA_CRIME_ID); return CrimeFragment.newInstance(crimeId); //return new CrimeFragment(); }
注意:在该fragment布局中,若新建类时工具默认加入了其他方法,比如onCreate,必须手动删除,否则会使SingleFragmentActivity出现不可避免的问题,然后就会很麻烦了。
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/crime_view_pager"> </android.support.v4.view.ViewPager>
public class CrimeFragment extends Fragment { private Crime mCrime; private EditText mTitleField; private Button mDateButton; private CheckBox mSolvedCheckBox; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCrime=new Crime(); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { //加载布局 View v=inflater.inflate(R.layout.fragment_crime,container,false); //生成并使用EditText组件 mTitleField=(EditText)v.findViewById(R.id.crime_title); mTitleField.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) { mCrime.setTitle(s.toString()); } @Override public void afterTextChanged(Editable s) { // } }); //生成并使用Button组件 mDateButton=(Button)v.findViewById(R.id.crime_data); mDateButton.setText(mCrime.getDate().toString()); mDateButton.setEnabled(false); //生成并使用CheckBox组件 mSolvedCheckBox=(CheckBox)v.findViewById(R.id.crime_solved); mSolvedCheckBox.setChecked(mCrime.isSolved()); mSolvedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mCrime.setSolved(isChecked); } }); return v; } }
这里要注意:编写监听器CheckBox时,需要使用alt+enter组合键添加包导入语句,Android Studio当提供两个选择时,必须选择android.widget.CompoundButton,否则会出现报错,导致运行错误。
package edu.niit.software.criminalintent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import java.util.List; import java.util.UUID; /** * Created by 666 on 2017/9/22. */ public class CrimePagerActivity extends AppCompatActivity { private static final String EXTRA_CRIME_ID = "com.bignerdranch.android.criminalintent.crime_id"; private ViewPager mViewPager; private List<Crime> mCrimes; public static Intent newIntent(Context packageContext , UUID crimeId){ Intent intent = new Intent(packageContext , CrimePagerActivity.class); intent.putExtra(EXTRA_CRIME_ID,crimeId); return intent; } @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_crime_pager); UUID crimeId = (UUID) getIntent().getSerializableExtra(EXTRA_CRIME_ID); mViewPager = (ViewPager) findViewById(R.id.crime_view_pager); mCrimes = CrimeLab.get(this).getCrimes(); FragmentManager fragmentManager = getSupportFragmentManager(); mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) { @Override public Fragment getItem(int position) { Crime crime = mCrimes.get(position); return CrimeFragment.newInstance(crime.getId()); } @Override public int getCount() { return mCrimes.size(); } }); for (int i = 0 ; i < mCrimes.size() ; i++){ if (mCrimes.get(i).getId().equals(crimeId)){ mViewPager.setCurrentItem(i); break; } } } }
注意:要使操作系统成功启动CrimePagerActivity,需要打开AndroidManifest.xml,可以直接将CrimeActivity重命名为CrimePagerActivity.
这样,我们的App界面就会美观、功能就能强大了:
博客付出的是汗水,奉献的是才学,寥寥几笔,请君观阅,如有辞错,望君海涵!
标签:监听 view ica uuid 生成 lis state 错误 str
原文地址:http://www.cnblogs.com/xinjin/p/7615395.html