Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中对一个活动执行两个操作_Android_Android Listview - Fatal编程技术网

如何在android中对一个活动执行两个操作

如何在android中对一个活动执行两个操作,android,android-listview,Android,Android Listview,我想在我的Android应用程序中实现搜索。 在此页面中,首先显示用户列表,然后对用户列表执行搜索。两者都在同一活动中。通过以下方式,我从上一页获得了意图和一些值。当我显示用户列表时,所有的值都会出现。但在执行搜索时,spaceId丢失并变为空。我需要这个值 Intent intent = this.getIntent(); Bundle receiveBundle = intent.getExtras(); spaceId = receiveBundle.getString("spaceId"

我想在我的Android应用程序中实现搜索。 在此页面中,首先显示用户列表,然后对用户列表执行搜索。两者都在同一活动中。通过以下方式,我从上一页获得了意图和一些值。当我显示用户列表时,所有的值都会出现。但在执行搜索时,
spaceId
丢失并变为空。我需要这个值

Intent intent = this.getIntent();
Bundle receiveBundle = intent.getExtras();
spaceId = receiveBundle.getString("spaceId");
我应该怎么做才能得到这个值

编辑:

String spaceId;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    Intent intent = this.getIntent();
        Bundle receiveBundle = intent.getExtras();
        spaceId = receiveBundle.getString("spaceId");
        String URLTicketList = String.format(getString(R.string.URLTicketList, spaceId));
        RestClient client = new RestClient(URLTicketList,
                this.getApplicationContext());
        try {
            client.Execute(RequestMethod.GET);
        } catch (Exception e) {
            e.printStackTrace();
        }

        TabSettings ts = new TabSettings();
        ts.setSelTab(0);
        String response  = client.getResponse();
        tickets = parseTicketList(response);
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {

            String query = intent.getStringExtra(SearchManager.QUERY);
            searchResult=getMatchingStrings(tickets,query);
            this.ticket_adapter = new TicketAdapter(this,
                        R.layout.ticket_details_row,searchResult);
            setListAdapter(this.ticket_adapter);
        }
        else  {
            this.ticket_adapter = new TicketAdapter(this,
                        R.layout.ticket_details_row, tickets);
            setListAdapter(this.ticket_adapter);
        }

    }
获取匹配字符串()

ArrayList GetMatchingString(ArrayList列表,字符串regex1){
ArrayList listClone=新的ArrayList();
for(票证字符串:列表){
if(string.getAssignedTo().equals(regex1)){
添加(字符串);
}
}
返回列表克隆;
}

当您第一次在“活动”中加载列表时,必须将该空格Id保存在某个SharedReference变量中以供进一步使用。在使用搜索结果重新加载“活动”时,您可以从先前保存的SharedReference变量中找到该Id

请确保,当您第一次在活动中加载列表时,您会覆盖该变量,以干净地满足您的需要

您还必须从intent获取spaceId,如:

int spaceId=0;
if(getIntent().hasExtra())
    spaceId=getIntent().getStringExtra("spaceId");
当你重新加载相同的活动时,这样做不会给你额外的奖励

或者,您必须将此spaceId与用于重新加载用于显示搜索结果的相同活动的意图一起传递


希望你明白了

如果在执行搜索时重新启动相同的活动,则会丢失该值。如果正在执行此操作,则在重新启动时还可以使用intent.putextra()方法将该空格ID传递给重新启动活动

getIntent().getExtras().getString("spaceId");

正如你的问题和评论一样,我想如果你的活动被重新创建,你就会遇到问题

在活动标记下的清单文件中添加以下代码

android:configChanges="keyboardHidden|orientation"
将不会再次创建您的活动


然后在需要的地方使用spaceID的值

您说您的活动正在重新创建。因此,在重新创建之后,您不会获得spaceID的值。然后按照下面的步骤做这件事

public String PREFS_NAME = "Shared_Pref";

Bundle receiveBundle = this.getIntent().getExtras();
String spaceId_value = receiveBundle.getString("spaceId");

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

if(spaceId_value == null) {
     spaceId_value = settings.getString("spaceId", "");
}
else {
     SharedPreferences.Editor editor = settings.edit();
     editor.putString("spaceId", spaceId_value);
}
我希望这能帮到你

编辑:

我正在编辑你的代码

我编辑了哪一部分,我提到了编辑的那一部分。仔细查看我所更改的内容,并在代码中执行该操作。那就告诉我

     String spaceId;
     public String PREFS_NAME = "Shared_Pref";  //edited part

     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        //editing start

         SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
         Bundle receiveBundle = this.getIntent().getExtras();
         if(receiveBundle != null) {
             spaceId = receiveBundle.getString("spaceId");
             if(spaceId == null) {
                 spaceId = settings.getString("spaceId", "");
             }
             else {
                 SharedPreferences.Editor editor = settings.edit();
                 editor.putString("spaceId", spaceId);
             }
         }

        //editing end

        String URLTicketList = String.format(getString(R.string.URLTicketList, spaceId));
        RestClient client = new RestClient(URLTicketList,
            this.getApplicationContext());
        try {
            client.Execute(RequestMethod.GET);
        } catch (Exception e) {
            e.printStackTrace();
        }

        TabSettings ts = new TabSettings();
        ts.setSelTab(0);
        String response  = client.getResponse();
        tickets = parseTicketList(response);
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {

            String query = intent.getStringExtra(SearchManager.QUERY);
            searchResult=getMatchingStrings(tickets,query);
            this.ticket_adapter = new TicketAdapter(this,
                        R.layout.ticket_details_row,searchResult);
            setListAdapter(this.ticket_adapter);
        }
        else  {
            this.ticket_adapter = new TicketAdapter(this,
                        R.layout.ticket_details_row, tickets);
            setListAdapter(this.ticket_adapter);
        }

    }

user370305:实际上我在搜索时不需要这个spaceId,但是当我进行搜索时再次调用Activity.class,这次spaceId为null,这导致了问题。我只需要搜索用户列表,但单击再次调用的搜索活动,并列出此方法,对票证执行搜索,并返回搜索结果。请检查并使用此选项,但对我无效:(.实际上我不再需要spaceid,我只需要搜索票证,但由于活动已重新创建,我将此spaceid设置为null,而这是y票证列表为null。它对我有效,但仍不清楚您要做什么这次我将spaceid设置为“”,但我需要以前的值。请告诉我是否将捆绑包获取为null?Debati:我添加了editor.commit();,现在将spaceId获取为null:)请粘贴您正在使用的活动的完整代码。然后,只有我才能告诉您问题出在哪里。并告诉我,当重新创建活动时,您的捆绑包是否为空?请执行以下两项操作。debarati:我已添加了我的全部代码,在emulator上单击“搜索”按钮时,spaceid的值为空
     String spaceId;
     public String PREFS_NAME = "Shared_Pref";  //edited part

     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        //editing start

         SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
         Bundle receiveBundle = this.getIntent().getExtras();
         if(receiveBundle != null) {
             spaceId = receiveBundle.getString("spaceId");
             if(spaceId == null) {
                 spaceId = settings.getString("spaceId", "");
             }
             else {
                 SharedPreferences.Editor editor = settings.edit();
                 editor.putString("spaceId", spaceId);
             }
         }

        //editing end

        String URLTicketList = String.format(getString(R.string.URLTicketList, spaceId));
        RestClient client = new RestClient(URLTicketList,
            this.getApplicationContext());
        try {
            client.Execute(RequestMethod.GET);
        } catch (Exception e) {
            e.printStackTrace();
        }

        TabSettings ts = new TabSettings();
        ts.setSelTab(0);
        String response  = client.getResponse();
        tickets = parseTicketList(response);
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {

            String query = intent.getStringExtra(SearchManager.QUERY);
            searchResult=getMatchingStrings(tickets,query);
            this.ticket_adapter = new TicketAdapter(this,
                        R.layout.ticket_details_row,searchResult);
            setListAdapter(this.ticket_adapter);
        }
        else  {
            this.ticket_adapter = new TicketAdapter(this,
                        R.layout.ticket_details_row, tickets);
            setListAdapter(this.ticket_adapter);
        }

    }