有什么问题可以在评论区交流,欢迎指出问题!
(考完了,基本上就这些,如果有需要这次考试的资料的同学可以加我v)
题型分析
选择题10道 填空题30道 判断题10道 共50分
选择填空就看Summary吧。
程序填空题20分(应该是四道) 和程序片段题30分
老师说过的重点
老师说大题主要是Java代码,就不用看XML了,按教材上的来。
Listener的三种实现方式(必考)
这个是老师上课多次强调过的,应该会在程序片段里。考法是给出了三种中的一种,然后让你改写为其他的一种。
一、当前类(current class)实现 P169
//1.在class后面加上implements OnClickListener。
public class test extends Activity implements OnClickListener {
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator);
}
//2.在class内部重写onClick方法
@Override
public void onClick(View v) {
//3.把题目里onClick里的东西抄过来
}
}
//4.需要的话给控件绑定
testButton.setOnClickListener(this);
二、自定义类(named class)实现 P169
首先自定义类
//1.自定义一个Linstener类,implements OnClickListener
class ButtonLinstener implements OnClickListener{
//2.重写onClick(View v)
@Override
public void onClick(View v) {
//把题目里onClick实现的方法抄过来
}
}
//3.实例化自定义的类,绑定
ButtonLinstener buttonLinstener = new ButtonLinstener();
button.setOnClickListener(buttonLinstener);
实现这个类,给控件绑定。
//实现这个类
ButtonListener buttonListener = new ButtonListener();
//绑定
testButton.setOnClickListener(buttonListener)
三、内部匿名类(anonymous inner class)实现(重点)P171
有两种方法,我选了比较常用的一种方法。
testButton.setOnClickListener(new OnClickListener(){
@override
public void onClick(View v){
//题目中onClick实现的方法
}
});
layout
LinearLayout
RelativeLayout
Weight(重要)
weight只要记住名字、基本属性和特殊属性和高级Listener就行,应该不会考多少。
weight的基本属性
这个是xml的内容,稍微看一下。
<weight的名字
android:id="@+id/priceInput" //id
android:layout_width="wrap_content" //控件的长宽,wrap_content就是适应内容的多少
android:layout_height="wrap_content" //match_parent就是和他的父容器一样大
android:layout_marginStart="20dp" //weight的位置
android:layout_marginTop="20dp"
/>
在Java代码中找到weight
//创建出你想要的weight的对象,通过findById方法就能找到对应的对象
EditText editText = findById(R.id.edit);
//之后你就可以通过set方法来修改weight的属性或者绑定Listener了
editText.setText("OvO");
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
return false;
}
});
//设置不可见
editText.setVisibility(View.GONE);
一些控件太简单就不说了,我重点说需要java代码的weight。
EditText P139
顾名思义就是输入框,特殊属性有:
//特殊属性
android:inputType=""
常用的值:text\number\date\time\numberDecimal
CheckBox P141
复选框
//特殊属性
//true默认勾选
android:checked="true"
CheckBox checkBox = findById(R.id.checkBox)
if(checkBox.isChecked()){
//被选择后的操作
}else{
//没被选择后的操作
}
Radio Button P142
单选框
//特殊属性
//true默认勾选
android:checked="true"
RadioButton radioButton1= findById(R.id.radioButton1)
if(radioButton1.isChecked()){
//被选择后的操作
}
RadioGroup radioGroup = findById(R.id.radioGroup);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//checkedId就是被选择的按钮的id
swith(checkedId);
case R.id.button1:
...
//需要的东西
break;
case R.id.button2:
...
//需要的东西
break;
});
Spinner P147
下拉框,这个比较复杂,需要用一个适配器(adapter)来显示下拉框
Spinner periodSpinner = findViewById(R.id.periodsSpinner);
//创建adapter,第二个参数是string.xml文件里的string-array
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.period_array, android.R.layout.support_simple_spinner_dropdown_item);
//绑定视图
adapter.setDropDownViewResource(android.R.layout.support_simple_spinner_dropdown_item);
periodSpinner.setAdapter(adapter);
//绑定listener
periodSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//position就是选择的第几个框的id
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//如果什么都没选的话
}
});
//设置选择的id
periodSpinner.setSelection(0);
//获取选择的id
int position = periodSpinner.getSelectedItemPosition();
//获取选择的文本
String selectedText = periodSpinner.getSelectedItem();
SeekBar P149
拖动框
//特殊属性
//最大能滑到的值
android:max="30"
//默认值
android:progress="15"
SeekBar seekBar = findViewById(R.id.percentSeekbar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
//当滑动时
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//progress就是当前的值
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Activity(重点)
Activity的加载
还需要再AndroidManifest.xml文件中给Activity注册(register)
public class SellingCalculator extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//初始化界面
setContentView(R.layout.car_selling_calculator);
}
}
Activity的生命周期
Fragment(重点)
Preference是基于fragment的,二者很类似。
Fragment的加载
public class fragment extends Fragment{
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home,container,false);
return view
}
动态加载Fragment
@override
public void onClick(View view){
//new一个fragment
RightFragment fragment = new Fragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.Right_layout,fragment);
transaction.commit();
}
Fragment的生命周期(重点)
Service (重要)
Service本质上也是一种activity,区别是生命周期和没有可视化界面,可以通过intent启动。
Service的创建
public class test extends Service {
@Override
public void onCreate() {
//创建时候需要的功能
}
//必须实现的方法
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
在Activity中启动停止暂停Service
配合生命周期使用
Intent serviceIntent = new Intent(this,service.class);
startService(serviceIntent);
stopService(serviceIntent);
//这个是自己停止自己
stopSelf();
Service的生命周期
Preference
这个应该会出填空
如何显示(displays Preference)P243
public class fragment extends PreferenceFragment{
public void onCreate(Bundle savedInstancestate){
...
//在里面写
addPreferencesFromResource(R.xml.preference);
}
}
public class activity extends Activity{
public void onCreate(Bundle savedInstancestate){
...
//在里面写
getFragmentManager().beginTransaction()
.replace(android.R.id.content,new fragment());
.commit;
}
}
如何获取preference的值(get preference)P245
PreferenceManager.setDefaultValues(this,R.xml.preference,false);
private SharedPreference pref = PreferenceManager.getDefaultSharedPreferences(this);
boolean percent = pref.getBoolean("percent",true);
menu
这个应该会出填空
如何显示菜单(displays menu)P235
@override
public boolen onCreateoptionMenu(Menu menu){
//R.menu.后面是menu的xml文件名
getMenuInflater().inflate(R.menu.test_menu,menu);
return true;
}
怎样处理菜单选项事件(handles the menu item events)P235
@override
public boolean onOptionsItemSelected(MenuItem item){
//获取点击的选项的id
switch(item.getItemId()){
//R.id.后面的是menu.xml中定义的item的id
case R.id.menu_a:
//按题目要求写
case R.id.menu_b:
//按题目要求写
//默认情况下的操作
default:
return super.onOptionsItemSelected(item);
}
}
List view(重点)
list view由三部分组成:listview所在的activity、item.xml、adapter。
adapter P317
ArrayList<RSSItem> items = feed.getAllItems();
ArrayList<HashMap<String,String>> data = new ArrayList<HashMap<String,String>>();
for(RSSitem item :items){
HashMap<String,String> map = new HashMap<String,String>();
map.put("data",item.getData);
map.put("title",item.getTitle);
data.add(map);
}
int resource = R.layout.listview.item;
String[] from = {"data","title"};
int[] to = {R.id.DataTextView,R.id.TitleTextView};
SimpleAdapter adapter = new SimpleAdapter(this,data,resource,from,to);
ListView itemListView= findById(R.id.listView);
itemListView.setAdapter(adapter);
为ListView绑定Listener P319
itemListView.setOnItemClickListener(new OnItemClickListener{
@override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
...
//需要处理的东西
}
});
intent(重点)
intent可以在不同的activity中传递数据或打开activity。
存取数据(重要)
Intent intent = new intent(this,需要跳转的activity.class);
//使用键值(key-value)对的方式来存数据,前面的参数是value,后面的是key
intent.putExtra("test",test);
//在另一个activity中
//通过get方法来取值,get后面需要跟值的类型,如Int、String、float
Intent intent =getIntent();
String string = intent.getStringExtra("test");
跳转新的页面(重要)
Intent intent = new intent(this,需要跳转的activity.class);
this.startActivity(intent);
通过URL跳转到浏览器 P323
ACTION_VIEW 启动浏览器
ACTION_CALL启动拨号
ACTION_DIAL会询问用户要不要拨号
//用String存一个URL,创建uri对象
String link = "www.ayakaovo.top"
Uri uri = uri.parse(link);
Intent viewIntent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(viewIntent);