【问题标题】:Add two activity in Android Manifest在 Android Manifest 中添加两个活动
【发布时间】:2014-05-07 17:37:43
【问题描述】:

我的 android 项目中有一个 main.xml,它具有以下控制权

TextBox1 按钮1 文本框2按钮2

文本框3
文本框4 标签1

按钮3

我有两个活动名称 DatePickerDialogAppsActivity 和 JSONSampleAppActivity。

Datepickerdialogappsactivity 具有在 button1 和 button2 点击事件上弹出数据选择器的功能

Jsonsampleactivity 与我的 sql 数据库连接,并在 button3 点击事件上使用标签绑定数据,从 textbox3 和 textbox4 中的用户获取输入

问题:我的 main.xml 文件同时访问 datepickerdialogappsactivity 和 jsonsampleactivity 我应该如何定义活动和清单文件。

这是我的代码,每次只有一个活动运行意味着我在第一个节点上定义的每个活动都可以工作,其次是不工作。例如,在下面的代码中 datepickerdialogappsactivity 有效,而 jsonsampleactivity 不起作用,如果我首先定义 jsonsample 活动,它将起作用,然后第二个将不起作用,请指导

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".DatePickerDialogAppsActivity"

            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=".jsonsampleactivity"

            android:label="@string/app_name" >

        </activity>


    </application>

Main.xml 代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:hint="From Date"
        >

        <requestFocus />
    </EditText>


    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:hint="To Date"
        >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       android:width="150px"

        android:onClick="showDatePickerDialog"
        android:text="From Date" />

      <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

          android:width="150px"

        android:onClick="showDatePickerDialogg"
        android:text="To Date" />

    <EditText
        android:id="@+id/txtUserName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:hint="User Name"
        >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/txtPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:hint="Password"
        android:inputType="textPassword"
        />


    <Button
        android:id="@+id/btnLogin"
        android:layout_width="128dp"
        android:layout_height="wrap_content"
        android:text="Button" />

    <TextView
        android:id="@+id/lblStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Status"
        android:textAppearance="?android:attr/textAppearanceLarge" />


</LinearLayout>

日期选择器代码

package com.Android.JSONApp;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;



public class DatePickerDialogAppsActivity extends Activity {
    /** Called when the activity is first created. */
    static final int DATE_DIALOG_ID=0;
    static final int DATE_DIALOG_IDD=1;
    int yr,mon,day, yrr, monn, dayy;



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



    }


    public void showDatePickerDialog(View v)
    {
         Calendar today=Calendar.getInstance();
         yr=today.get(Calendar.YEAR);
         mon=today.get(Calendar.MONTH);
         day=today.get(Calendar.DAY_OF_MONTH);
        showDialog(DATE_DIALOG_ID);
    }

    public void showDatePickerDialogg(View v)
    {
         Calendar today=Calendar.getInstance();
         yrr=today.get(Calendar.YEAR);
         monn=today.get(Calendar.MONTH);
         dayy=today.get(Calendar.DAY_OF_MONTH);
        showDialog(DATE_DIALOG_IDD);
    }
    protected Dialog onCreateDialog(int id)
    {
        switch (id) {
        case DATE_DIALOG_ID:
            return new DatePickerDialog(this,dateSetListener,yr,mon+1,day);
        case DATE_DIALOG_IDD:
            return new DatePickerDialog(this,dateSetListenerr,yrr,monn+1,dayy);
        }
        return null;
    }
    private DatePickerDialog.OnDateSetListener dateSetListener=new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // TODO Auto-generated method stub
            yr=year;
            mon=monthOfYear +1;
            day=dayOfMonth;
            EditText it=(EditText)findViewById(R.id.editText1);

            it.setText(day+" - "+mon+" - "+yr);
        }
    };

private DatePickerDialog.OnDateSetListener dateSetListenerr=new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int yearr, int monthOfYearr,
                int dayOfMonthh) {
            // TODO Auto-generated method stub
            yrr=yearr;
            monn=monthOfYearr +1;
            dayy=dayOfMonthh;
            EditText itt=(EditText)findViewById(R.id.editText2);

            itt.setText(dayy+" - "+monn+" - "+yrr);
        }
    };
}

json示例代码

package com.Android.JSONApp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class JSONSampleAppActivity extends Activity implements OnClickListener{
    /** Called when the activity is first created. */

    //Property declaration
    Button btnLogin;
    TextView lblStatus;
    EditText txtUserName,txtPassword;


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

        btnLogin=(Button)findViewById(R.id.btnLogin);
        btnLogin.setOnClickListener(this);

        lblStatus=(TextView)findViewById(R.id.lblStatus);

        txtUserName=(EditText)findViewById(R.id.txtUserName);
        txtPassword=(EditText)findViewById(R.id.txtPassword);
    }

    @Override
    public void onClick(View v) {

        switch(v.getId())
        {
            case R.id.btnLogin:
                String userName=txtUserName.getText().toString();
                String password=txtPassword.getText().toString();
                if(verifyLogin(userName,password))
                {
                    lblStatus.setText("Login Successful");
                }
                else
                {
                    lblStatus.setText("Login Failed");
                }
                break;
        }
    }

    public static String convertStreamToString(InputStream is) 
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
        } 
        catch (IOException e) {
            e.printStackTrace();
        } 
        finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

    public static boolean verifyLogin(String UserName,String Password)
    {
        try
        {
            System.out.println("guru");
            DefaultHttpClient httpClient=new DefaultHttpClient();

            //Connect to the server
            HttpGet httpGet=new HttpGet("http://xxx/Service1.svc/checkLogin?name="+UserName+"&pass="+Password);
            //Get the response
            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            InputStream stream=httpEntity.getContent();

            //Convert the stream to readable format
            String result= convertStreamToString(stream);

            if(result.charAt(1)=='1')
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch(Exception e)
        {
            return false;
        }

    }


}

【问题讨论】:

  • 我不明白,你想让两个活动同时开始吗?
  • 您如何尝试使用这些活动?添加代码
  • 是的,我希望两个活动同时开始
  • Android 操作系统允许您一次启动一项活动。
  • 我已经在@Aashish 上面添加了代码,main.xml 文件可以访问这两个活动的解决方案是什么

标签: android datepicker android-manifest


【解决方案1】:

您可以使用一个 Activity 来完成这两项工作,如下所示:

public class MainActivity extends Activity {
/** Called when the activity is first created. */
static final int DATE_DIALOG_ID=0;
static final int DATE_DIALOG_IDD=1;
int yr,mon,day, yrr, monn, dayy;

Button btnLogin;
TextView lblStatus;
EditText txtUserName,txtPassword;

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


    btnLogin=(Button)findViewById(R.id.btnLogin);
    btnLogin.setOnClickListener(this);

    lblStatus=(TextView)findViewById(R.id.lblStatus);

    txtUserName=(EditText)findViewById(R.id.txtUserName);
    txtPassword=(EditText)findViewById(R.id.txtPassword);
}


public void showDatePickerDialog(View v)
{
     Calendar today=Calendar.getInstance();
     yr=today.get(Calendar.YEAR);
     mon=today.get(Calendar.MONTH);
     day=today.get(Calendar.DAY_OF_MONTH);
    showDialog(DATE_DIALOG_ID);
}

public void showDatePickerDialogg(View v)
{
     Calendar today=Calendar.getInstance();
     yrr=today.get(Calendar.YEAR);
     monn=today.get(Calendar.MONTH);
     dayy=today.get(Calendar.DAY_OF_MONTH);
    showDialog(DATE_DIALOG_IDD);
}
protected Dialog onCreateDialog(int id)
{
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this,dateSetListener,yr,mon+1,day);
    case DATE_DIALOG_IDD:
        return new DatePickerDialog(this,dateSetListenerr,yrr,monn+1,dayy);
    }
    return null;
}
private DatePickerDialog.OnDateSetListener dateSetListener=new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        // TODO Auto-generated method stub
        yr=year;
        mon=monthOfYear +1;
        day=dayOfMonth;
        EditText it=(EditText)findViewById(R.id.editText1);

        it.setText(day+" - "+mon+" - "+yr);
    }
};

private DatePickerDialog.OnDateSetListener dateSetListenerr=new     DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int yearr, int monthOfYearr,
            int dayOfMonthh) {
        // TODO Auto-generated method stub
        yrr=yearr;
        monn=monthOfYearr +1;
        dayy=dayOfMonthh;
        EditText itt=(EditText)findViewById(R.id.editText2);

        itt.setText(dayy+" - "+monn+" - "+yrr);
    }
};

@Override
public void onClick(View v) {

    switch(v.getId())
    {
        case R.id.btnLogin:
            String userName=txtUserName.getText().toString();
            String password=txtPassword.getText().toString();
            if(verifyLogin(userName,password))
            {
                lblStatus.setText("Login Successful");
            }
            else
            {
                lblStatus.setText("Login Failed");
            }
            break;
    }
}

public static String convertStreamToString(InputStream is) 
{
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } 
    catch (IOException e) {
        e.printStackTrace();
    } 
    finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

public static boolean verifyLogin(String UserName,String Password)
{
    try
    {
        System.out.println("guru");
        DefaultHttpClient httpClient=new DefaultHttpClient();

        //Connect to the server
        HttpGet httpGet=new HttpGet("http://xxx/Service1.svc/checkLogin?name="+UserName+"&pass="+Password);
        //Get the response
        HttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity httpEntity = httpResponse.getEntity();
        InputStream stream=httpEntity.getContent();

        //Convert the stream to readable format
        String result= convertStreamToString(stream);

        if(result.charAt(1)=='1')
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    catch(Exception e)
    {
        return false;
    }

}
}

【讨论】:

    【解决方案2】:

    在这两个活动中,使用:

    setContentView(R.layout.main);
    

    但是,如果两个活动具有相同的布局,您想要实现什么?

    根据经验,您应该始终为不同的活动使用不同的 xml。

    【讨论】:

    • @ashish 这是我正在尝试实现我的 main.xml 的形式,它通过它从用户那里获取输入,例如从日期到日期,用户名和密码,所以我需要显示日期选择器功能所以用户可以通过日历选择日期并进行身份验证,我已经调用了其他活动,因此我需要使用 2 个活动,我该如何实现它
    • 要认证,为什么不用方法?
    • @ashish 我已经在上面写了完整的代码,你可以检查一下吗
    • 你在 DatePickerDialogAppsActivity 的 onCreate() 中什么也没做。 setcontentView() 之后什么都没有。
    • @ashish 谢谢我明白了你的使用方法的观点并且它有效,我已经将两个活动合并到一个活动中
    【解决方案3】:

    如果两个Activities 共享相同的布局,就功能而言是可以的(但至少在设计方面很奇怪,因为Activity 类旨在通过UI 与用户交互):在Android 中只有一个@987654324 @可以同时显示。因此,您不能同时显示 2 个活动。如果您从另一个Activity 开始,第一个将被暂停。如果您希望这两个活动都显示在启动器中,则它们都应具有以下内容:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    

    但其中一个也应该注释为默认值:

    <category android:name="android.intent.category.DEFAULT"/>
    

    【讨论】:

    • 那么解决方案是什么?通过日历日期并进行身份验证,我已经调用了其他活动,我该如何实现它。
    • @user3597236 在这种情况下,您可以在按钮的onClickListener 处调用startActivity(...),例如。看这里developer.android.com/training/basics/firstapp/…
    • @nikist 我用过,但同样只有默认活动有效,其他无效
    猜你喜欢
    • 2023-03-19
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多