这次主要是设计两个页面的相互转换,设计另一种activity开启方式StartActivityForResult
题目:编写一个程序:用户在第一个页面输入若干个数并提交给第二个页面。第二个页面对这些数从大到小排序并显示排序之后的结果,并将这些数的平均值返回给第一个页面显示。
涉及的知识点:
1.Android intent介绍及使用方法
https://v.youku.com/v_show/id_XMjUwOTc1NDc2MA==
2.java 字符串截取的方式
3.Intent使用
传值(当前Activity)
Intent intent = new Intent(this,OtherActivity.class);
Intent.putExtra(“key”,“value”);
startActivity(intent);
取值(目标Activity)
Intent intent = getIntent();
String name = intent .getStringExtra(“key”);
4.开始结束Activity这次用的是
启动activity时,要求是有结果返回的
int resquestCode = 100;
Inetnt intent = new Intent(this,OtherActivity.class);
startActivityForResult(intent,reaquestCode);
实现方法获得返回值
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//String avg = data.getStringExtra("avg");
//avg_res.setText(avg);
}
在目标Activity中设置对应的结果码,设置返回值
Intent result = new Intent();
result.putExtra("key",value);
setResult(resultCode,result);
finish();
最终实现效果图如下:
activity_main.xml代码如下:
<TextView
android:id="@+id/txt"
style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/txt"></TextView>
<EditText
android:id="@+id/input"
style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:autofillHints=""
android:inputType="date|textUri|textShortMessage|textLongMessage|textAutoCorrect|numberSigned|textVisiblePassword|textWebEditText|textMultiLine|textNoSuggestions|textFilter|number|datetime|textWebEmailAddress|textPersonName|text|textPhonetic|textCapSentences|textPassword|textAutoComplete|textImeMultiLine|textPostalAddress|numberDecimal|textEmailAddress|numberPassword|textCapWords|phone|textEmailSubject|textCapCharacters|time|textWebPassword"
tools:targetApi="o"></EditText>
<TextView
android:id="@+id/avg"
style="@android:style/Widget.Holo.Light.TextView.SpinnerItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/avg" />
<EditText
android:id="@+id/avg_res"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:autofillHints=""
android:ems="10"
android:inputType="textPersonName"
tools:targetApi="o" />
<Button
android:id="@+id/submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/button"></Button>
activity_second.xml代码如下:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/result"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
style="?android:attr/borderlessButtonStyle"
android:text="@string/txt1"></TextView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/res"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:importantForAutofill="no"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/back"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
style="?android:attr/borderlessButtonStyle"
android:text="@string/button1"></Button>
</LinearLayout>
MainActivity.java代码如下:
private Button submit;
private EditText input,avg_res;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.submit = (Button)findViewById(R.id.submit);
this.input = (EditText)findViewById(R.id.input);
this.avg_res = (EditText)findViewById(R.id.avg_res);
submit.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onClick(View v) {
//System.out.println(input.getText().toString());
//avg_res.setText(input.getText().toString());
Intent intent = new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
intent.putExtra("num",input.getText().toString());
startActivityForResult(intent,1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String avg = data.getStringExtra("avg");
avg_res.setText(avg);
}
SecondAcivity.java代码如下:
private Button back;
private EditText res;
String array;
int sum=0;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
this.res = (EditText)findViewById(R.id.res);
this.back = (Button)findViewById(R.id.back);
final Intent intent = getIntent();
array = intent.getStringExtra("num");
final String[] strs=array.split(" ");
int[] a = new int[strs.length];
for(int i = 0; i < strs.length; i++)
{
//System.out.println(11);
//先由字符串转换成char,再转换成String,然后Integer
a[i] = Integer.parseInt(strs[i].toString());
// System.out.println(a[i]);
}
Arrays.sort(a);
for(int i=0,len=strs.length;i<len;i++){
res.append(Integer.toString(a[i]));
sum = sum +a[i];
res.append(" ");
}
//res.setText(array);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String avg = Double.toString(sum*1.0/(strs.length));
Intent result = new Intent();
result.putExtra("avg",avg);
setResult(1,result);
finish();
}
});
}
好啦,说一下我的思路以及卡住的点(好多卡住的是不了解JAVA,不会使用QAQ):
主要是在主界面用editText接收输入的待排序的一些数组(默认空格分隔,这个很重要,涉及后面如何处理,当然可自定义分隔方式)
第一个界面点击提交,把editText里面的一串字符(待排序的数字串)通过intent传输到第二个界面,然后实现跳转到第二个界面,这里也可以直接在第一个界面将字符串转化成Int类型数组,排好序,在传递给第二个界面,由于我自己还不会传递数组的方式,会比较麻烦,就没选择这种方式(QAQ还是因为太菜了)
第二个界面接收到来自第一个界面的字符串信息,利用inal String[] strs=array.split(" ");split函数,实现字符串分割,取出每一个数字(字符型)数组中,再将数组转化成整型数组
for(int i = 0; i < strs.length; i++)
{
a[i] = Integer.parseInt(strs[i].toString());//这里没想到会出现问题,一定要注意要有toString(),不然会有逻辑错误,会闪退
}
之后再利用Arrays.sort函数自动排序,之后计算出平均值,再利用intent传回给第一个界面。
好啦!结束啦!