I have the following screen setup in android. A button on screen1 on clicking which you are taken to screen2. Screen2 has 2 buttons at the bottom of the screen. One button that displays a searchable listView and the other that takes you back to screen1. The code for screen1:
screen1.java
package com.example.screenchange;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class ScreenChange extends Activity {
/** Called when the activity is first created. */
private Button button01;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button01 = (Button)findViewById(R.id.button01);
button01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v(this.toString(), "Inside on click listener for screen 2.");
Intent intent = new Intent(v.getContext(), screen2.class);
Log.v(this.toString(), "Intent created. Moving to start activity.");
startActivity(intent);
}
});
}
}
screen1.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Move to screen 2"
/>
</LinearLayout>
Screen2.java:
package com.example.screenchange;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
public class screen2 extends ListActivity {
private Button button02;
private Button button03;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen2);
button02 = (Button)findViewById(R.id.button02);
button02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v(this.toString(), "Button02 clicked.");
Intent intent = new Intent(); //takes control back to screen1.
finish();
}
});
button03 = (Button)findViewById(R.id.button03);
button03.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v(this.toString(), "Button03 clicked.");
ArrayAdapter<String> listView = new ArrayAdapter<String>(v.getContext(), R.layout.listview, COUNTRIES);
setListAdapter(listView);
getListView().setTextFilterEnabled(true);
}
});
}
static final String[] COUNTRIES = new String[] {
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
"Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
"Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
"Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
"British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
"Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
"Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
"Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
"Cook Islands"
}
screen2.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Welcome to screen 2">
<Button
android:id="@+id/button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get back to screen 1."
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:clickable="true">
</Button>
<Button
android:id="@+id/button03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="Display countries."
android:clickable="true">
</Button>
<ListView
android:id="@+android:id/android:list"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:text="@id/text1">
</ListView>
</RelativeLayout>
listview.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/text1">
</TextView>
android-manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.screenchange"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ScreenChange"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".screen2"
android:label="Screen 2 - New actvity.">
</activity>
</application>
</manifest>
The problems I get are as follows:
1. The buttons on screen2 go unresponsive the moment I switch to screen2. No output on the logcat, no nothing. 2. There might eve开发者_StackOverflow中文版n be errors in getting the listview to display, but I am not able to see any.Any help is welcome,
Sriram.I copied your code eclipse and tested.
screen2.xml: file
<ListView
android:id="@+android:id/android:list"
android:layout_height="wrap_content"// instead of fill_parent
android:layout_width="wrap_content"
android:text="@id/text1">
</ListView>
your code will work.
But one's you clicked "Display countries" your listview fill the entire screen. And your button's again get unclickable. My suggestion is that give some max size to your listview how much it should occupy so that your button remains clickable.
I guess because of fill_parent in list view your button might not get focus.
I copied and tested the above code but the application kept running into force close, until the following change was made in ScreenChange
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen1); // instead of R.layout.main
change your button2 code to this
button02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v(this.toString(), "Button02 clicked.");
finish();
}
});
there is no need of creating a new intent finish() will do the work
精彩评论