码迷,mamicode.com
首页 > 其他好文 > 详细

一款神器--CriminalIntent

时间:2017-09-30 17:52:51      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:监听   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。

 在完成编码的途中,问题和注意点也遇到了不少:

(1) 首先,我们新建了CrimeActivity.java

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出现不可避免的问题,然后就会很麻烦了。

 

(2) 然后,建立CrimeActivity.java的视图布局activity_crime.xml

<?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>

 

 

(3)后面,实现UI布局,定义了CrimeFragment类并且创建Fragment事务

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,否则会出现报错,导致运行错误。

 

(4)最后,通过Viewpager的使用,实现列表滑动切换,查询不同日期的时间明细

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界面就会美观、功能就能强大了:

技术分享

 

 

博客付出的是汗水,奉献的是才学,寥寥几笔,请君观阅,如有辞错,望君海涵!

 

一款神器--CriminalIntent

标签:监听   view   ica   uuid   生成   lis   state   错误   str   

原文地址:http://www.cnblogs.com/xinjin/p/7615395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!