這幾天接觸android程序,在程序中看見StartActivity()函數,所以在網上百度的時候就出現了和StartActivityForResult()函數的比較,個人感覺比較好,所以就按照樓主給的Demo敲了一遍。但是由於樓主是粘貼的代碼,所以給出來的部分不是太全,對於剛剛接觸的新手來說遇見不少的問題。
寫了一個關於開啓Activity的Demo:共三個Activity:MainActivity用戶填寫用戶姓名電話城市、CityActivity用於用戶選擇城市,ShowActivity用於展示用戶信息。
首先我還是先把代碼貼出來:
MainActivity.java:
package com.example.test;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener {
private Button button_city,button_phone,button_save;
private EditText editText_city,editText_name,editText_phone;
private static final int SELECT_CITY_REQUEST =2;
private static final int SELECT_PHONE_REQUEST =3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_city = (Button)findViewById(R.id.select_city);
button_phone = (Button)findViewById(R.id.phone1);
button_save = (Button)findViewById(R.id.save);
editText_city = (EditText)findViewById(R.id.editText_city);
editText_name = (EditText)findViewById(R.id.editText_name);
editText_phone = (EditText)findViewById(R.id.editText_phone);
button_city.setOnClickListener(this);
button_phone.setOnClickListener(this);
button_save.setOnClickListener(this);
}
public void onClick(View v) {
// TODO 自動生成的方法存根
switch (v.getId()) {
case R.id.select_city:
Intent i = new Intent ();
i.setClass(MainActivity.this, CityActivity.class);
startActivityForResult(i, SELECT_CITY_REQUEST);
break;
case R.id.phone1:
Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
pickContactIntent.setType(Phone.CONTENT_TYPE);
startActivityForResult(pickContactIntent, SELECT_PHONE_REQUEST);
break;
case R.id.save:
String name=editText_name.getText().toString();
String city = editText_city.getText().toString();
String phone = editText_phone.getText().toString();
Intent saveIntent = new Intent(MainActivity.this,ShowActivity.class);
saveIntent.putExtra("content", "NAME: "+name+"\nCITY: "+city+"\nPHONE:"+phone);
startActivity(saveIntent);
break;
default:
break;
}
}
}
對應的layout配置:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TextView>
<Button
android:id="@+id/name1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textView1"
android:layout_marginTop="28dp"
android:layout_toRightOf="@+id/textView1"
android:text="Name" />
<Button
android:id="@+id/city1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/name1"
android:layout_below="@+id/name1"
android:layout_marginTop="34dp"
android:text="City" />
<EditText
android:id="@+id/editText_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/city1"
android:layout_toRightOf="@+id/name1"
android:ems="10" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/phone1"
android:layout_toRightOf="@+id/city1"
android:ems="10"
android:inputType="textPersonName" />
<Button
android:id="@+id/select_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editText_city"
android:layout_alignRight="@+id/editText_city"
android:text="select city" />
<Button
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/namephone"
android:layout_below="@+id/phone1"
android:layout_marginTop="46dp"
android:layout_toRightOf="@+id/textView1"
android:text="save" />
<Button
android:id="@+id/phone1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/city1"
android:layout_marginTop="101dp"
android:text="select_phone" />
<EditText
android:id="@+id/editText_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/namephone"
android:layout_toRightOf="@+id/namephone"
android:ems="10"
android:inputType="phone" />
<Button
android:id="@+id/namephone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/phone1"
android:layout_marginBottom="47dp"
android:text="phone" />
save" />
</RelativeLayout>
CityActivity.java:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class CityActivity extends Activity {
private ExpandableListView eListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_city);
initEListView();
}
private void initEListView() {
ExpandableListAdapter adapter = new BaseExpandableListAdapter() {
private String[] countries = new String[] { "China", "USA", "UK" };
private String[][] cities = new String[][] {
{ "BeiJing", "ShangHai", "HongKong", "TaiBei" },
{ "Washington", "New York", "Los Angles", "San Fransico" },
{ "London", "Manchester", "Birmingham", "Liverpool" } };
private TextView getTextView() {
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
TextView textView = new TextView(CityActivity.this);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_HORIZONTAL);
textView.setPadding(0, 0, 0, 0);
textView.setTextSize(20);
return textView;
}
public boolean isChildSelectable(int groupPosition,
int childPosition) {
Toast.makeText(
CityActivity.this,
"you have clicked Group:" + groupPosition + "Child:"
+ childPosition + "\n"
+ countries[groupPosition] + " "
+ cities[groupPosition][childPosition],
Toast.LENGTH_SHORT).show();
Intent i = new Intent();
i.putExtra("city", cities[groupPosition][childPosition]);
setResult(RESULT_OK, i);
finish();
return true;
}
public boolean hasStableIds() {
return true;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
LinearLayout linearLayout = new LinearLayout(CityActivity.this);
linearLayout.setOrientation(0);
TextView textView = getTextView();
textView.setText(getGroup(groupPosition).toString());
linearLayout.addView(textView);
return linearLayout;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public int getGroupCount() {
return countries.length;
}
public Object getGroup(int groupPosition) {
return countries[groupPosition];
}
public int getChildrenCount(int groupPosition) {
return cities[groupPosition].length;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView textView = getTextView();
textView.setText(getChild(groupPosition, childPosition)
.toString());
textView.setGravity(Gravity.CENTER_HORIZONTAL);
return textView;
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public Object getChild(int groupPosition, int childPosition) {
return cities[groupPosition][childPosition];
}
};
eListView = (ExpandableListView) findViewById(R.id.eListView);
eListView.setAdapter(adapter);
}
}
CityActivity對應的layout配置:
ShowActivity .java:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class ShowActivity extends Activity{
private TextView showTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_show);
showTextView = (TextView)findViewById(R.id.textView1);
Intent i =getIntent();
String content = i.getStringExtra("content");
showTextView.setText(content);
}
}
ShowActivity 對應的layout配置文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TextView>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_marginLeft="62dp"
android:layout_marginTop="42dp"
android:layout_toRightOf="@+id/textView2"
android:text="TextView" />
</RelativeLayout>
運行成功後出現的畫面:
其中在選擇城市的界面,會有點小錯誤,希望有誰解決了可以跟我說一下:1143403680(qq)
在其中我出現的錯誤:
1:在mainactivity界面中,點擊sclect_city按鈕會閃退出程序,這是因爲在cityactivity.java中,id號沒有查找到:
eListView = (ExpandableListView) findViewById(R.id.eListView);
eListView.setAdapter(adapter);
2:剛接觸android程序,在創建了三個activity時,要在清單中(AndroidManifest.xml文件中)添加上另外的activity:
3:還有就是上面提到的,雖然在ExpandableListView控件中可以顯示城市名,但是會一閃而過,目前還沒有解決。
好了,基本上我遇見的問題就這幾個,也許是我愚笨了點,還望大神們多多指教。