开发者

Moving from one activity to another - android

开发者 https://www.devze.com 2023-02-05 05:03 出处:网络
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 l

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

0

精彩评论

暂无评论...
验证码 换一张
取 消