根据官方的安卓文档,"活动 "是用户可以做的单一的、集中的事情。

这个词显然源于动词 "act",基本上意味着执行一个动作或与某些东西互动。

尽管我们可以有一个没有视觉组件的 "活动",但大多数活动的创建是为了承载视图和小工具,用户可以与之互动。

因此,活动可以模糊地指代用户将与之互动的整个屏幕。

中國八字2023黑水兔

中國八字2023黑水兔
中國八字2023黑水兔

在这种思维方式下,我们可以对我们的活动做一些事情。

编号 动作 描述
打开新的 "活动",这将取代当前的 "活动 "或屏幕。
2.关闭当前的 "活动",这样我们就看不到它了。安卓系统不会完全杀死它,只是把它放在后台,以免你再回来找它。
3. 旋转设备 假设你正在看这个应用程序的视频或玩游戏,你想用不同的布局来查看它。这个过程会导致 "活动 "的重新创建,以满足你的布局需求。

做类似上述的事情会导致安卓系统引发各种生命周期的回调。这些方法基本上是在 "活动 "的生命周期的不同阶段以事件驱动的方式被提出。例如,创建、暂停、恢复、启动、重新启动、停止等。

一个 "活动 "的展示机制

在安卓系统中,"活动 "可以用不同的方式呈现。

| 编号 | 机制 | 描述 |

| 1.| 全屏窗口 : | 最常见的展示 "活动 "的方式,通过这种方式,活动覆盖整个屏幕。|
| 2. | 浮动窗口 : | 活动'可以通过设置了windowIsFloating’属性的主题设置为浮动窗口。|
| 3. | 嵌入 : | 活动也可以使用 "活动组 "嵌入到另一个 "活动 "中。|

但是请注意,嵌入不再具有吸引力,因为早在 "API level 13 "中,随着 "Fragments "的引入,ActivityGroup被废弃了。Fragments和Fragment Transaction APIs以更好、更模块化的方式实现了这一点。如果说fragments基本上是子活动的话,那么它有自己的生命周期。

活动类定义

让我们来看看一个 "活动 "的程序化描述。

首先它属于android.app包。

package android.app;

Activity是一个和其他类一样的类,但也有自己的特点。它也是公共的,所以它在它自己的包之外的其他包中是可见的和可用的。

public class Activity..{}

作为一个类,它也具有其他类所具有的面向对象的特性,例如。

  1. 能够派生自其他类并被派生。
  2. 2.实现接口的能力。
  3. 能够拥有自己的方法、字段和内部类。

事实上,"活动 "类派生自ContextThemeWrapper类。

public class Activity extends ContextThemeWrapper..{}

ContextThemeWrapper使该类有能力从包装的上下文中操作和修改主题。

此外,一个`活动’实现了几个接口。

public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2 Window.Callback KeyEvent.Callback View.OnCreateContextMenuListener ComponentCallbacks2{}
Activity的子类和孙子类

这就是活动的直接子类和间接子类。

下面是直接子类。

| 编号 | 活动 | 描述 |

| 1.| FragmentActivity | 希望使用支持库的Fragments和Loader APIs的活动所使用的超类。
| 2.| NativeActivity | 对于那些希望纯粹用本地代码实现的便捷活动。|
| 3. | ListActivity | 一个专门用于显示绑定在数据源上的项目列表的活动。|
| 4. | 4.可扩展的列表活动 | 一个专门用于显示绑定在数据源上的可扩展的项目列表的活动。|
| 5. | AliasActivity | 为一个活动提供类似别名的机制。它通过启动另一个活动然后杀死自己来实现这一目的。|
| 6. | AccountAuthenticatorActivity | 超级类,用于创建实现AbstractAccountAuthenticator的活动。|
| 7. | 在引入Fragments后,在API 13中被废弃了。在此之前,它是创建一个有多个嵌入式活动的屏幕的方法。|

好吧,这些是活动的子女。

现在让我们来看看孙子/孙女的子类。

| 编号 | 活动 | 主要家长 | 描述 |

| 1. | AppCompatActivity | FragmentActivity | AppCompatActivity是计划利用动作栏功能的活动的超级类目。|
| 2. | ~ActionBarActivity~ | AppCompatActivity | 已被弃用。在这之前,它被用来为活动提供动作栏功能。现在这个角色已经转移到了AppCompatActivity。|
| 3. | ~*TabActivity~ | ActivityGroup | 早在API 13级时就被废弃了。在此之前,它被用来创建Tabbed Activities。现在Fragments可以做到这一点。|
| 4. | PreferenceActivity | ListActivity | 超级类,用于向用户显示偏好的层次结构。|
| 5. | 启动器活动 | ListActivity | 这将显示所有可用于给定意图的活动的列表。|

Capabilities 活动类提供了它的子类

我们可以,而且已经说过,活动代表了用户可以做的单一重点事情。

所以我们知道它允许我们使用和呈现用户可以交互的视图和部件。

然而,现在让我们来探讨一下 "活动 "类给它的子类提供的更详细和具体的功能。

1. 语境功能
  1. 检查各种权限 。例如:checkPermission(String permission, int pid, int uid)将确定系统中运行的特定进程和用户ID是否有通过的权限,checkUriPermission(Uri uri, int pid, int uid, int modeFlags)将确定系统中运行的特定进程和用户ID是否有权限访问通过的Uri等。
    1. 连接或创建应用服务。如果需要,Context可以用来连接应用服务或创建它。这通过bindService(Intent service, ServiceConnection conn, int flags)方法调用完成。
      3.创建其他的Contexts。例如createConfigurationContext(Configuration overrideConfiguration)将为当前的上下文创建一个新的Context对象,但是资源要根据传递的配置进行调整,createPackageContext(String packageName, int flags)为给定的应用程序名称返回一个新的Context对象。
    1. 列出相关的数据库和文件databaseList()将为我们提供一个字符串数组,包含与此Context的应用程序包相关的私有数据库,而fileList()返回一个字符串数组,包含与此Context的应用程序包相关的私有文件。
    1. 删除相关的数据库和文件。Context提供了我们的方法:deleteDatabase(String name)删除与此Context的应用程序包相关的SQLiteDatabase,deleteFile(String name)删除与此Context的应用程序包相关的指定私有文件。
      6.获取应用程序上下文。Context的getApplicationContext()将返回我们当前进程的单一全局应用程序对象。
      7.获取应用信息。通过getApplicationInfo()我们可以得到当前Context的包的全部应用信息。

快速活动示例

1. 如何启动一个 "活动"?

为了启动一个活动',你需要一个Intent’对象。让我们创建一个方法,为我们启动一个 "活动"。这个方法将接受一个上下文对象以及目标 "活动 "的类名,也就是我们想要开启的 "活动"。

    void start(Context c, Class e){
        Intent i = new Intent(,e);
        c.startActivity(i);
        //a.finish();
    }
2. 如何结束/杀死一个 "活动"?

为了完成一个活动',我们使用finish()’方法。

    void killIntent(Context c){
        Intent i = new Intent(c,MainActivity.class);
        c.startActivity(i);
        c.finish();
    }
3. 如何确定一个 "活动 "是否在前台?

这个例子方法可以为我们确定一个`活动’是否在前台。它根据结果返回一个布尔值。

    public static boolean isForeground(Context context, String className) {
        if (context == null || TextUtils.isEmpty(className)) {
            returnfalse;
        }
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
        if (list != null && list.size() > 0) {
            ComponentName cpn = list.get(0).topActivity;
            if (className.equals(cpn.getClassName())) {
                return true;
            }
        }
        returnfalse;
    }

    public static boolean isForeground(Activity activity) {
        return isForeground(activity, activity.getClass().getName());
    }
4.如何处理背压

假设你想正确地处理背压,你可能想在退出当前活动之前向用户显示一个警告对话框。在这种情况下,你创建一个handleBackPress()方法。

    public void handleBackPress() {
        mExitDialog = true;
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style
                .AlertDialogStyle);
        builder.setTitle(R.string.leave_chat)
                .setMessage(R.string.leave_chat_desc)
                .setCancelable(false)
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                mExitDialog = false;
                                dialog.cancel();
                            }
                        })
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //showSaveHistoryDialog();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
        alert.getWindow().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color
                .black14)));
    }

在上面的例子中,当用户点击返回按钮时,我们要向他显示一个警告对话框。

Android AppCompatActivity

AppCompatActivity是一个类,它作为超级类,用于那些想要利用支持库动作栏功能的活动。

在你的活动中使用android.support.v7.app.ActionBar的要求是。

  1. 要运行 "API级别7 "或更高。
  2. 2.然后扩展这个类。
  3. 将你的活动主题设置为android.support.v7.appcompat.R.style#Theme_AppCompat Theme.AppCompat或类似主题。

主题确实在AndroidManifest.xml中被设置,例如

<activity
      android_name=".MainActivity"
      android_label="@string/app_name"
      android_theme="@style/AppTheme.NoActionBar">....</activity>

AppCompatActivity被定义在android.support.v7.app包内。

package android.support.v7.app;

它派生自android.support.v4.app.FragmentActivity

public class AppCompatActivity extends FragmentActivity{}

并实现了几个接口。

public class AppCompatActivity extends FragmentActivity implements AppCompatCallback,TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider {}

下面是一个派生自AppCompatActivity的类的例子。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

设置AppCompatActivity主题

AppCompatActivity和其他活动主题一样,可以通过androidmanifest设置

<activity
      android_name=".MainActivity"
      android_label="@string/app_name"
      android_theme="@style/AppTheme.NoActionBar">....</activity>

或通过 "setTheme() "方法以编程方式设置。

public void setTheme(@StyleRes final int resid) {}

我们可以创建一个自定义的材质主题,供AppCompatActivity使用。

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

然后我们还可以通过android:theme="..."属性来为整个应用程序全局设置该主题。

<application
        android_allowBackup="true"
        android_icon="@mipmap/ic_launcher"
        android_label="@string/app_name"
        android_roundIcon="@mipmap/ic_launcher_round"
        android_supportsRtl="true"
        android_theme="@style/AppTheme">
        <activity android_name=".MainActivity">

        </activity>
    </application>

检索AppCompatActivity动作条

AppCompatActivity给了我们一个方法来检索其动作栏的引用。

public ActionBar getSupportActionBar(){}

如果它没有动作条,那么将返回 "null"。

在AppCompatActivity中使用工具条作为动作条

我们可以使用android.support.v7.widget.Toolbar代替动作条。工具栏的优势在于使用和定制的灵活性。

ActionBars通常是Activity的不透明窗口装饰的一部分。因此它们是由框架控制的。

另一方面,ToolBars可以在你的应用程序的布局中使用。因此它们是灵活的。

假设我们有一个定义如下的工具条。

...
<android.support.v7.widget.Toolbar
            android_id="@+id/toolbar"
            android_layout_width="match_parent"
            android_layout_height="?attr/actionBarSize"
            android_background="?attr/colorPrimary"
            app_popupTheme="@style/AppTheme.PopupOverlay" />
...

在我们的activity_main.xml中。

我们可以使用 "setSupportActionBar() "将其作为动作栏使用,并将 "toolbar "引用作为参数传递。

public void setSupportActionBar(@Nullable Toolbar toolbar) {}

例子。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

要清除它,你要传递null

Android Studio – 创建空的活动项目

如何在Android Studio中创建一个空的活动

如何在android studio中用空活动模板创建一个项目。我们看到如何使用Android studio来创建一个空的活动。

空活动只是安卓开发的一个模板。它是最容易上手的模板,因为它为我们生成了一个java文件和一个xml布局文件。

下面是这个过程。

  1. 首先在android studio中创建一个空项目。转到文件–>新项目。
  2. 2.输入应用程序的名称,并选择公司名称。
  3. 选择最小的SDK。
  4. 选择空的活动。
  5. 5.点击完成。

这将为我们生成一个项目,内容如下。

| 编号 | 名称 | 类型 | 描述 |

| 1. | activity_main.xml | XML Layout | 将被膨胀成MainActivity视图。你在这里添加你的视图和部件。|
| 2. | MainActivity.java | 类 | 你的Launcher活动 |

该活动将自动在android_manifest.xml中注册。Android活动是组件,通常需要作为应用组件注册。
如果你已经手动创建了你的活动,那么请在<application>...<application>内注册,如下所示,将MainActivity替换为你的活动名称。

        <activity android_name=".MainActivity">
            <intent-filter>
                <action android_name="android.intent.action.MAIN" />
                <category android_name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

你可以看到,一个动作和类别被指定为意图过滤器。这个类别使我们的MainActivity成为启动器活动。当android应用程序运行时,启动器活动会首先被执行。

Android Studio – 创建基本活动项目

*如何在android studio中用基本活动模板创建一个项目。

这是给初学者的教程,看看如何在基本模板的基础上创建一个安卓项目。

以下是这个过程。

  1. 首先在android studio中创建一个新项目。转到文件–>新项目。
  2. 2.输入应用程序的名称,并选择公司名称。
  3. 选择最小的SDK。
  4. 选择基本活动。
  5. 5.点击完成。

基本活动将有一个工具栏和浮动的动作按钮已经被添加到布局中。

通常使用这个选项会生成两个布局。

| 编号 | 名称 | 类型 | 描述 |

| 1. | activity_main.xml | XML Layout | 将被膨胀为MainActivity布局,通常包含带有工具栏的appbarlayout,也有一个浮动的行动按钮。|
| 2. | content_main.xml | XML布局 | 将被包含在activity_main.xml中,你在这里添加你的视图和部件。|
| 3. | 主活动.java | 类 | 主活动。|

在这个例子中,我使用了一个基本的活动。

该活动将自动在android_manifest.xml中注册。Android活动是组件,通常需要作为一个应用程序组件注册。

如果你已经手动创建了你的活动,那么请在<application>...<application>内注册,如下所示,将MainActivity替换为你的活动名称。


        <activity android_name=".MainActivity">

            <intent-filter>

                <action android_name="android.intent.action.MAIN" />

                <category android_name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

你可以看到,一个动作和类别被指定为意图过滤器。这个类别使我们的MainActivity成为启动器活动。当android应用运行时,启动器活动会首先被执行。

创建基本活动项目的优势

你可以为这个项目选择空活动而不是基本活动。

然而,基本活动有以下优势。

编号 优势
1. 为我们提供了一个现成的工具条,为我们提供了动作条的功能,但又很容易定制。
2. 为我们提供了应用栏布局,实现了材料设计应用栏的概念。
3. 提供了一个浮动操作按钮,我们可以随时使用它来启动快速操作,特别是在这样的例子中。
4. 4.将我们的自定义内容视图和部件与模板功能(如工具条)分离。

生成的项目结构

AndroidStudio将通过一组文件和目录为你生成一个具有默认配置的项目。

以下是其中最重要的部分。

编号 文件 主要责任
1. build/ 一个包含资源的目录,这些资源是通过构建应用程序和android工具生成的类来编译的。这样的工具就是R.java文件。R.java文件通常保存对应用程序资源的引用。
2. libs/ 保存我们在项目中使用的库。
3. src/main/ 保存我们应用程序的源代码,这是你工作的主要文件夹。
4. src/main/java/ 包含我们以包形式组织的java类。
5. src/main/res/ 包含我们的项目资源文件夹,如下所示。
6. src/main/res/drawable/ 包含我们的可绘制资源。
7. src/main/res/layout/ 包含我们的布局资源。
8. src/main/res/menu/ 包含我们的菜单资源XML代码。
9. src/main/res/values/ 包含我们的值资源的XML代码。这些定义了一组名-值对,可以是字符串、样式和颜色。
10. AndroidManifest.xml 这个文件在我们创建android项目时自动生成。它将定义android系统需要的基本信息,如应用程序名称、软件包名称、权限、活动、意图等。
11. build.gradle 用于构建android应用的Gradle脚本。

Android活动–从一个活动向另一个活动传递基元

让我们看看如何从一个活动向另一个活动传递原始数据类型。我们传递。

  • 字符串
  • 整数
  • 布尔型(通过CheckBox)

第一个活动

第二个活动

到第二个活动中,并在第二个活动中显示它们。

Gradle文件

我们将在应用程序级别的build.gradle文件中添加依赖关系。

1. Build.gradle

下面是我们在build.gradle文件中的应用层。

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        testImplementation 'junit:junit:4.12'
        implementation 'com.android.support:appcompat-v7:24.2.1'
        implementation 'com.android.support:design:24.2.1'
    }

`

布局资源

我们有三个xml布局。

  1. activity_main.xml
  2. content_main.xml
  3. activity_second.xml

1. activity_main.xml

  • 我们主要活动的模板布局。

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout

        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_fitsSystemWindows="true"
        tools_context="com.tutorials.hp.primitivespassing.MainActivity">

        <android.support.design.widget.AppBarLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android_id="@+id/toolbar"
                android_layout_width="match_parent"
                android_layout_height="?attr/actionBarSize"
                android_background="?attr/colorPrimary"
                app_popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/content_main" />

        <android.support.design.widget.FloatingActionButton
            android_id="@+id/fab"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_gravity="bottom|end"
            android_layout_margin="@dimen/fab_margin"
            android_src="@android:drawable/ic_dialog_email" />

    </android.support.design.widget.CoordinatorLayout>

2. content_main.xml

  • 让我们在这里添加我们的edittexts和checkbox。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        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"
        app_layout_behavior="@string/appbar_scrolling_view_behavior"
        tools_context="com.tutorials.hp.primitivespassing.MainActivity"
        tools_showIn="@layout/activity_main">

        <LinearLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_orientation="vertical">

            <android.support.design.widget.TextInputEditText
                android_id="@+id/nameTxt"
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_enabled="true"
                android_focusable="true"
                android_hint="Name"
                android_textSize="25dp"
                android_textStyle="bold" />

            <android.support.design.widget.TextInputEditText
                android_id="@+id/txtID"
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_enabled="true"
                android_focusable="true"
                android_hint="ID"
                android_textSize="25dp"
                android_textStyle="bold" />

            <LinearLayout
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_orientation="horizontal"
                android_padding="5dp">

                <TextView
                    android_layout_width="250dp"
                    android_layout_height="wrap_content"
                    android_text="Technology Exists ??"
                    android_textSize="25dp"
                    android_textStyle="bold" />

                <CheckBox
                    android_id="@+id/techExists"
                    android_layout_width="wrap_content"
                    android_layout_height="wrap_content"
                    android_checked="true"
                    android_textSize="25dp" />
            </LinearLayout>
            <Button android_id="@+id/sendBtn"
                android_layout_width="wrap_content"
                android_layout_height="60dp"
                android_text="Send"
                android_clickable="true"
                android_padding="5dp"
                android_background="#009968"
                android_textColor="@android:color/white"
                android_textStyle="bold"
                android_textSize="20dp" />
        </LinearLayout>
    </RelativeLayout>

3. activity_second.xml

  • 这里是第二个活动的代码。
  • 这个活动将从主活动中接收数据并在这里显示。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout

        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="com.tutorials.hp.primitivespassing.SecondActivity">

        <LinearLayout
            android_layout_width="match_parent"
            android_layout_height="wrap_content"
            android_orientation="vertical">

            <LinearLayout
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_orientation="horizontal"
                android_padding="5dp">

                <TextView
                    android_layout_width="250dp"
                    android_layout_height="wrap_content"
                    android_text="NAME"
                    android_textSize="25dp"
                    android_textStyle="bold" />

                <TextView
                    android_id="@+id/nameTxtSecond"
                    android_layout_width="match_parent"
                    android_layout_height="wrap_content"
                    android_text="value received"
                    android_textSize="25dp" />
            </LinearLayout>

            <LinearLayout
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_orientation="horizontal"
                android_padding="5dp">

                <TextView
                    android_layout_width="250dp"
                    android_layout_height="wrap_content"
                    android_text="ID"
                    android_textSize="25dp"
                    android_textStyle="bold" />

                <TextView
                    android_id="@+id/txtIDSecond"
                    android_layout_width="match_parent"
                    android_layout_height="wrap_content"
                    android_text="value received"
                    android_textSize="25dp" />
            </LinearLayout>

            <LinearLayout
                android_layout_width="match_parent"
                android_layout_height="wrap_content"
                android_orientation="horizontal"
                android_padding="5dp">

                <TextView
                    android_layout_width="250dp"
                    android_layout_height="wrap_content"
                    android_text="Technology Exists ??"
                    android_textSize="25dp"
                    android_textStyle="bold" />

                <CheckBox
                    android_id="@+id/techExistsSecond"
                    android_layout_width="wrap_content"
                    android_layout_height="wrap_content"
                    android_checked="true"
                    android_textSize="25dp" />
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>

java类

我们有两个类或两个活动。

  1. MainActivity.java
  2. SecondActivity.java

1. MainActivity类

  • 我们的MainActivity。
  • 我们将把数据从这个活动传递给第二个活动。

    package com.tutorials.hp.primitivespassing;

    import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.TextInputEditText;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;

    public class MainActivity extends AppCompatActivity {

        //DECLARE VIEWS
        private TextInputEditText txtName, txtID;
        private CheckBox chkTechnologyExists;
        private Button sendBtn;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            this.initializeViews();

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                }
            });

            //WHEN SEND BTN IS CLICKED,SEND
            sendBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    sendData();
                }
            });
        }

        /*
        REFERENCE VIEWS WE ARE USING
         */
        private void initializeViews() {
            txtName = (TextInputEditText) findViewById(R.id.nameTxt);
            txtID = (TextInputEditText) findViewById(R.id.txtID);
            chkTechnologyExists = (CheckBox) findViewById(R.id.techExists);
            sendBtn = (Button) findViewById(R.id.sendBtn);

        }

        /*
        SEND DATA TO SECOND ACTIVITY
         */
        private void sendData() {
            //GET PRIMITIVE VALUES TO SEND
            String name = txtName.getText().toString();
            int id = Integer.parseInt(txtID.getText().toString());
            Boolean techExists = chkTechnologyExists.isChecked();

            //PACK THEM IN AN INTENT OBJECT
            Intent i = new Intent(this, SecondActivity.class);
            i.putExtra("NAME_KEY", name);
            i.putExtra("ID_KEY", id);
            i.putExtra("TECHEXISTS_KEY", techExists);

            //LETS LEAVE OUR TXTS CLEARED
            txtName.setText("");
            txtID.setText("");

            //START SECOND ACTIVITY
            this.startActivity(i);
        }
    }

2. 第二个活动类

  • 我们的第二个活动。
  • 将接收来自主活动的数据并在文本视图和复选框中显示它们。

    package com.tutorials.hp.primitivespassing;

    import android.support.design.widget.TextInputEditText;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.CheckBox;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;

    public class SecondActivity extends AppCompatActivity {

        //DECALRE SECOND ACTIVITY VIEWS
        TextView txtName2;
        TextView txtID2;
        CheckBox chkTechnologyExists2;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);

            //INITIALIZE THESE VIEWS
            txtName2 = (TextView) findViewById(R.id.nameTxtSecond);
            txtID2 = (TextView) findViewById(R.id.txtIDSecond);
            chkTechnologyExists2 = (CheckBox) findViewById(R.id.techExistsSecond);

            //RECEIVE DATA FROM MAIN ACTIVITY
            String name = getIntent().getStringExtra("NAME_KEY");
            int id = getIntent().getIntExtra("ID_KEY", 0);
            Boolean techExists = getIntent().getBooleanExtra("TECHEXISTS_KEY", false);

            //SHOW A TOAST
            Toast.makeText(SecondActivity.this, name, Toast.LENGTH_LONG).show();

            //SET THE DATA TO OUR LOCAL VIEWS
            txtName2.setText(name);
            txtID2.setText(String.valueOf(id));
            chkTechnologyExists2.setChecked(techExists);
        }
    }

Android ListActivity

Android ListActivity教程和例子。

ListActivity是一个activity,它通过绑定到数据源(如数组或Cursor)来显示一个项目列表。当用户选择一个项目时,ListActivity也向我们暴露了事件处理程序。

这是一个派生自 Activity 类的类。ListActivity是为了在你打算使用ListView时使用的。事实上,它确实承载了一个ListView对象,可以绑定到不同的数据源,通常是一个数组或一个持有查询结果的Cursor。

ListActivity的API定义

ListActivity,正如我们所说的,源自于Activity类。

public class ListActivity extends Activity

下面是它的继承层次。

java.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity
                   ↳    android.app.ListActivity

列表活动的子类

下面是派生自ListActivity的类。

编号 描述
1. LauncherActivity 一个显示所有活动的列表的类,这些活动可以在一个给定的意图下执行。在点击时启动。
偏好活动(PreferenceActivity)是一个活动的基础类,用于向用户显示偏好的层次结构。

屏幕布局

ListActivity有一个默认的布局,包括屏幕中央的一个单一的、全屏的列表。然而,如果你愿意,你可以通过在onCreate()中使用setContentView()来设置你自己的视图布局来定制屏幕布局。要做到这一点,你自己的视图必须包含一个ListView对象,其id为"@android:id/list"(如果是代码,则为list

可以选择,你的自定义视图可以包含另一个任何类型的视图对象,在列表视图为空时显示。这个 "空列表 "通知器必须有一个id"android:id/empty"。注意,当一个空视图出现时,当没有数据显示时,列表视图将被隐藏。

下面的代码演示了一个(丑陋的)自定义屏幕布局。它有一个绿色背景的列表,和一个备用的红色 "无数据 "信息。

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
         android_orientation="vertical"
         android_layout_width="match_parent"
         android_layout_height="match_parent"
         android_paddingLeft="8dp"
         android_paddingRight="8dp">

     <ListView android_id="@android:id/list"
               android_layout_width="match_parent"
               android_layout_height="match_parent"
               android_background="#00FF00"
               android_layout_weight="1"
               android_drawSelectorOnTop="false"/>

     <TextView android_id="@android:id/empty"
               android_layout_width="match_parent"
               android_layout_height="match_parent"
               android_background="#FF0000"
               android_text="No data"/>
 </LinearLayout>

顶级Android ListActivity示例

在本节中,我们将看看几个完整的ListActivity例子。

1. ListActivity和OnItemClick

在第一个例子中,我们将看看如何用一个简单的数组的数据来填充ListActivity。然后我们看看如何处理OnItemClick事件。

我们使用的API

让我们先定义一下我们在这个例子中要使用的几个API。

(a). ListActivity

这个类属于android.app。它是一个activity,通过绑定数据源(如数组或游标)来显示一个项目列表,并在用户选择一个项目时公开事件处理程序。

(b). 捆绑

Bundle是一个从String值到各种Parcelable类型的映射。

在这里阅读关于bundle的内容。

(c). 视图

这是一个代表用户界面组件的基本构建模块的类。一个视图在屏幕上占据一个矩形区域,负责绘图和事件处理。

在这里阅读关于视图的内容。

(c). ArrayAdapter

Arrayadapter是一个具体的BaseAdapter,它由一个任意对象的数组来支持。默认情况下,这个类期望提供的资源ID引用一个单一的TextView。

在这里阅读关于ArrayAdapter的信息。

(d). 列表视图

ListView是一个在垂直滚动的列表中显示项目的视图。这些项目来自与该视图相关的ListAdapter。

阅读关于ListView 这里

MyListActivity.java

import android.app.ListActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MyListActivity extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_my_list);

        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,values);
        setListAdapter(adapter);

    }
    @Override
    protected  void  onListItemClick(ListView l, View v, int position, long id){

        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();

    }
}

activity_my_list.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    tools_context="com.codekul.myandroidlistactivity.MyListActivity">

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="Hello World!"
        app_layout_constraintBottom_toBottomOf="parent"
        app_layout_constraintLeft_toLeftOf="parent"
        app_layout_constraintRight_toRightOf="parent"
        app_layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

下载

编号 位置 链接
1. GitHub 浏览
2. GitHub 原创作者: @1sumit

2. ListActivity和ArrayAdapter示例

让我们用CatNames来填充一个ListActivity,然后处理Click事件。我们不需要一个布局。

MainActivity.java

import android.app.ListActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ListActivity {

    final String[] catNamesArray = new String[] { "Рыжик", "Барсик", "Мурзик",
            "Мурка", "Васька", "Томасина", "Бобик", "Кристина", "Пушок",
            "Дымка", "Кузя", "Китти", "Барбос", "Масяня", "Симба" };
    private ArrayAdapter<String> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mAdapter = new ArrayAdapter<>(this,
                android.R.layout.simple_list_item_1, catNamesArray);
        setListAdapter(mAdapter);

    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
    }
}

下载

编号 位置 链接
1. GitHub 下载
2. GitHub 浏览 2.
2. GitHub 原创作者:@disiol

3. 使用AsyncTask的ListActivity

MainActivity.java


import android.app.ListActivity;
import android.content.Intent;
import android.os.AsyncTask;
import android.view.View;
import android.widget.Adapter;
import android.widget.ListView;

import java.util.List;

public final class AppPickerActivity extends ListActivity {

  private AsyncTask<Object,Object,List<AppInfo>> backgroundTask;

  @Override
  protected void onResume() {
    super.onResume();
    backgroundTask = new LoadPackagesAsyncTask(this);
    backgroundTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
  }

  @Override
  protected void onPause() {
    AsyncTask<?,?,?> task = backgroundTask;
    if (task != null) {
      task.cancel(true);
      backgroundTask = null;
    }
    super.onPause();
  }

  @Override
  protected void onListItemClick(ListView l, View view, int position, long id) {
    Adapter adapter = getListAdapter();
    if (position >= 0 && position < adapter.getCount()) {
      String packageName = ((AppInfo) adapter.getItem(position)).getPackageName();
      Intent intent = new Intent();
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
      intent.putExtra("url", "market://details?id=" + packageName);
      setResult(RESULT_OK, intent);
    } else {
      setResult(RESULT_CANCELED);
    }
    finish();
  }

}

4. ListActivity – Click to Open New Activity

这是一个ListActivity的例子,我们看一下如何在ListActivity中显示项目。然后当用户点击一个单项时,我们会打开一个新的活动。

MainActivity.java

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ListActivity {

    String[] names;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);

        names = getResources().getStringArray(R.array.friends);
        setListAdapter(new ArrayAdapter<String>(this, R.layout.friend_item, names));

    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Intent in = new Intent(this, SecondActivity.class);

        in.putExtra("message", getString(R.string.show_greetings)+ " " + names[(int) id] + "!" );

        startActivity(in);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

SecondActivity.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Intent in = getIntent();

        TextView txtName = (TextView) findViewById(R.id.txtGreetingName);
        txtName.setText(in.getStringExtra("message"));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_second, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

activity_main.xml

<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    android_paddingBottom="@dimen/activity_vertical_margin"
    tools_context=".MainActivity">

    <TextView android_text="@string/hello_world"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textSize="24sp"
        android_layout_alignParentTop="true"
        android_layout_centerHorizontal="true"
        android_layout_marginTop="54dp" />

</RelativeLayout>

activity_second.xml

<RelativeLayout
     android_layout_width="match_parent"
    android_layout_height="match_parent" android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    android_paddingBottom="@dimen/activity_vertical_margin"
    tools_context="com.example.paulorogerio.friendgreeting.SecondActivity">

    <TextView android_text="@string/hello_world"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textSize="24sp"
        android_gravity="center_vertical|center_horizontal"
        android_id="@+id/txtGreetingName"
        android_layout_alignParentTop="true"
        android_layout_centerHorizontal="true"
        android_layout_marginTop="55dp" />

</RelativeLayout>

friend_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android_layout_width="match_parent" android_layout_height="match_parent"
    android_text="Friend Name"
    android_gravity="center_vertical|center_horizontal"
    android_textSize="24sp"
    android_padding="20dp">

</TextView>

下载

编号 位置 链接
1. GitHub 下载
2. GitHub 浏览 2.
2. GitHub 原创作者:@paulonova 3.

5. ListActivity – 从存储在资产中的XML填充

在这个例子中,我们将看看如何使用XmlPullParser来解析存储在我们应用程序的Assets目录中的XML文档。
然后我们将展示解析后的xml结果,其中包括ListActivity中的图片和文本。

我们将从我们的XML文档中加载标题、链接和图片到我们的ListView。我们将从assets文件夹中打开我们的XML到一个InputStream中。然后我们将有一个ParseXML()方法,它将使用XmlPullParser解析我们的XML。

ImagesAdapter类将把XML中的图片和文本改编成一个自定义的ListView。它将使用ArrayAdapter作为基础适配器类。

ParseXML.java

这个ParseXML是主要的活动。

package com.example.parsexml;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ListView;

public class ParseXML extends Activity {
    InputStream xmlStream;
    ArrayList<ItemData> list;
    XMLHandler handler;
    ListView listView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_parse_xml);
        try {
            xmlStream = this.getAssets().open("ItemXML.xml");
            ParseXML();
            list = handler.getItemList();
            LoadImagesFromUrl();
            ImageAdapter adapter = new ImageAdapter(ParseXML.this, R.layout.imagelist, list);
            listView = (ListView) findViewById(R.id.imageList);
            listView.setAdapter(adapter);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_parse_xml, menu);
        return true;
    }

    public void ParseXML(){

        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader reader = sp.getXMLReader();
            handler = new XMLHandler();
            reader.setContentHandler(handler);
            reader.parse(new InputSource(xmlStream));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void LoadImagesFromUrl(){
        for (int i=0; i<list.size();i++){
            LoadChart loader = new LoadChart(ParseXML.this, list.get(i).link);
            loader.execute();
            list.get(i).bitmap = loader.getBitmap();
        }
    }
}

ItemData.java

这是一个模型类,表示一个单一的XML元素,将构成我们的ListView项目。我们将有标题、链接以及位图。

package com.example.parsexml;

import android.graphics.Bitmap;

public class ItemData {
    String title;
    String link;
    Bitmap bitmap;
    public Bitmap getBitmap() {
        return bitmap;
    }
    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getLink() {
        return link;
    }
    public void setLink(String link) {
        this.link = link;
    }

}

ImageAdapter.java

这是一个自定义的适配器类,源自 "ArrayAdapter"。它使用ViewHolder模式来保存要回收的视图。那个ViewHolder只是一个简单的类,用来保存TextView和ImageView小部件,以便回收,而不是每次调用getView()方法时都把它们膨胀起来。

package com.example.parsexml;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ImageAdapter extends ArrayAdapter{
    ViewHolder holder;
    Context ctx;
    List<ItemData> list;
    LoadChart loader;
    public ImageAdapter(Context context, int textViewResourceId,
            List<ItemData> objects) {
        super(context, textViewResourceId, objects);
        ctx = context;
        list = objects;

        // TODO Auto-generated constructor stub
    }
    private class ViewHolder{
        TextView titleView;
        ImageView img;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        if(convertView == null){
            LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(ctx.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.imagelist, null);
            holder = new ViewHolder();
            holder.img = (ImageView) convertView.findViewById(R.id.linkimage);
            holder.titleView = (TextView) convertView.findViewById(R.id.title);

            convertView.setTag(holder);

        }
        else{
            holder = (ViewHolder) convertView.getTag();
        }
        holder.titleView.setText(list.get(position).title);
        loader = new LoadChart(ctx, holder.img, list.get(position).link);
        loader.execute();

        return convertView;

    }

}

XMLHandler.java

这个类将派生自org.xml.sax.helpers.DefaultHandler类。DefaultHandler是SAX2事件处理程序的默认基类。在这个类中,我们覆盖了几个方法,如startElement(), endElement()characters()

package com.example.parsexml;

import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XMLHandler extends DefaultHandler{
    private ArrayList<ItemData> itemList = new ArrayList<ItemData>();
    String value = "";
    ItemData item = null;
    Boolean flag = false;

    public ArrayList<ItemData> getItemList() {
        return itemList;
    }

    public void setItemList(ArrayList<ItemData> itemList) {
        this.itemList = itemList;
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        if(flag){
            value = new String(ch, start, length);
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // TODO Auto-generated method stub
        flag = false;

        if(localName.equalsIgnoreCase("title")){
            item.setTitle(value);
        }
        if(localName.equalsIgnoreCase("link")){
            item.setLink(value);
        }
        if(localName.equalsIgnoreCase("item")){
            itemList.add(item);
        }

    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        flag = true;
        value = "";
        if(localName.equalsIgnoreCase("item")){
            item = new ItemData();

        }
    }

}

LoadChart.java

这个类将派生自抽象的asynctask类。因此,这允许我们在一个单独的线程中加载我们的XML。

package com.example.parsexml;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;

public class LoadChart extends AsyncTask<Void, Void, Bitmap> {
    private ImageView img;
    private Context con;
    static String urlString ;
    Bitmap bitmap= null;

    public Bitmap getBitmap() {
        return bitmap;
    }

    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }

    public LoadChart(Context context, ImageView img1, String url) {
        this.img = img1;
        this.con = context;
        urlString = url;
    }

    public LoadChart(Context context, String url) {
        this.urlString = url;
        this.con = context;
    }

    @Override
    protected void onPreExecute() {

        super.onPreExecute();
    }

    @Override
    protected Bitmap doInBackground(Void... params) {

        Bitmap bitmap = DownloadImage();

        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        this.bitmap = bitmap;
        //img.setImageBitmap(bitmap);

    }

    private static InputStream OpenHttpConnection(String urlString)
            throws IOException {

        Log.d("palval", "OpenHttpConnection");
        InputStream in = null;
        int response = -1;

        URL url = new URL(urlString);
        URLConnection conn = url.openConnection();

        if (!(conn instanceof HttpURLConnection))
            throw new IOException("Not an HTTP connection");

        try {
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect();

            response = httpConn.getResponseCode();

            if (response == HttpURLConnection.HTTP_OK) {
                in = httpConn.getInputStream();
            }

            String res = Integer.toString(response);
        } catch (Exception ex) {
            throw new IOException("Error connecting");
        }
        return in;
    }

    public static Bitmap DownloadImage() {
        Log.d("palval", "DownloadImage");
        Bitmap bitmap = null;
        InputStream in = null;
        try {

             //in = OpenHttpConnection("https://chart.googleapis.com/chart?chs=440x220&chd=t:60,40&cht=p3&chl=Hello|World");
            in = OpenHttpConnection(urlString);
            bitmap = BitmapFactory.decodeStream(in);
            in.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return bitmap;
    }

}

下载

编号 位置 链接
1. GitHub 下载
2. GitHub 浏览
2. GitHub Original Creator: @bansal2211

Android ListActivity – With Images,Text and OnItemClick ArrayAdapter

安卓列表活动图像、文本

这是一个Android自定义列表视图教程。如何在列表视图中显示图片和文本。我们使用arrayadapter作为我们的首选适配器。我们还看到如何处理自定义列表视图的项目点击。

第1节:CustomAdapter类

这是我们的CustomAdapter类。它将成为android.widget.ArrayAdapter的子类。在这里阅读更多关于ArrayAdapter的信息。

它是我们的适配器类。

    package com.tutorials.customlistviewarrayadapter;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;

    public class CustomAdapter extends ArrayAdapter<String>{

      final Context c;
      String[] values;

      //CONSTRUCTOR
      public CustomAdapter(Context context, String[] values) {
        super(context,R.layout.activity_main, values);

        this.c=context;
        this.values=values;

      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflator=(LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //INFLATE OUR XML LAYOUT TO ROW
        View row=inflator.inflate(R.layout.activity_main, parent,false);

        //DECLARE FIELDS CONTAINED IN OUR LAYOUR
        TextView tv=(TextView) row.findViewById(R.id.textView1);
        ImageView img=(ImageView) row.findViewById(R.id.imageView1);

        //GET AN ITEM FROM ARRAY
        String item=values[position];

        //DYNAMICALLY SET TEXT AND IMAGES DEPENDING ON ITEM IN ARRAY
        if(item.equals("android"))
        {
          tv.setText(item+" Programming language");
          img.setImageResource(R.drawable.android);
        }else if(item.equals("java"))
        {
          tv.setText(item+" Programming language");
          img.setImageResource(R.drawable.java);
        }else if(item.equals("c#"))
        {
          tv.setText(item+" Programming language");
          img.setImageResource(R.drawable.csharp);
        }else if(item.equals("mysql"))
        {
          tv.setText(item+" Database language");
          img.setImageResource(R.drawable.mysql);
        }else if(item.equals("access"))
        {
          tv.setText(item+" Database language");
          img.setImageResource(R.drawable.access);
        }else if(item.equals("excel"))
        {
          tv.setText(item+" Microsoft");
          img.setImageResource(R.drawable.excel);
        }

        return row;
      }

    }

第2节:MainActivity

我们的主活动。它将成为ListActivity类的子类。

package com.tutorials.customlistviewarrayadapter;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends ListActivity {

  String[] languages={"android","java","c#","mysql","access","excel"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //  setContentView(R.layout.activity_main);

        CustomAdapter adapter=new CustomAdapter(this, languages);
        setListAdapter(adapter);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);

        String item=(String) getListAdapter().getItem(position);

        Toast.makeText(getApplicationContext(),"Welcome to "+ item+" Programming language", Toast.LENGTH_SHORT).show();
    }
}

第3节:布局

ActivityMain.xml

我们的主活动的布局。

    <RelativeLayout

        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" >

        <ImageView
            android_id="@+id/imageView1"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_alignParentLeft="true"
            android_layout_alignParentTop="true"
            android_layout_marginLeft="16dp"
            android_layout_marginTop="17dp"
            android_src="@drawable/ic_launcher" />

        <TextView
            android_id="@+id/textView1"
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_layout_alignBottom="@+id/imageView1"
            android_layout_alignParentRight="true"
            android_layout_alignTop="@+id/imageView1"
            android_layout_marginLeft="16dp"
            android_layout_toRightOf="@+id/imageView1"
            android_text="TextView" />

    </RelativeLayout>

日安。