从一个活动转移到另一个活动 - android

时间:2011-01-19 06:39:08

标签: android listview android-activity

我在android中有以下屏幕设置。屏幕上的一个按钮1点击您将进入屏幕2。 Screen2在屏幕底部有2个按钮。一个按钮显示可搜索的listView,另一个按钮返回screen1。 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>   

我得到的问题如下:
1.当我切换到screen2时,屏幕2上的按钮没有响应。 logcat上没有输出,没有任何内容。
2.在显示列表视图时可能会出现错误,但我无法看到任何错误。

欢迎任何帮助,
斯利拉姆。

3 个答案:

答案 0 :(得分:1)

我复制了你的代码eclipse并进行了测试。

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> 

您的代码将有效。

但是你点击“显示国家/地区”,你的列表视图会填满整个屏幕。你的按钮再次无法点击。我的建议是给listview提供一些最大尺寸,以便你的按钮保持可点击状态。

我猜因为列表视图中的fill_parent,您的按钮可能无法获得焦点。

答案 1 :(得分:1)

我复制并测试了上面的代码,但应用程序一直生效,直到在ScreenChange中进行了以下更改

 
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.screen1); // instead of R.layout.main

答案 2 :(得分:0)

将您的button2代码更改为此

button02.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Log.v(this.toString(), "Button02 clicked.");
            finish();
        }
    });

不需要创建新的意图完成()将完成工作