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

时间:2011-11-21 05:19:40

标签: android android-listview

我想在我的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);
        }

    }

getMatchingstrings()

ArrayList<Ticket> getMatchingStrings(ArrayList<Ticket> list, String regex1)     {
        ArrayList <Ticket> listClone = new ArrayList<Ticket>(); 
            for (Ticket string : list) {
                    if(string.getAssignedTo().equals(regex1)){
                listClone.add(string);
                }
            }

          return listClone;
        }

5 个答案:

答案 0 :(得分:2)

试试吧

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

答案 1 :(得分:0)

当您首次在活动中加载列表时,您必须将spaceId保存在某个SharedPreference变量中以供进一步使用。在使用搜索结果重新加载活动时,您可以从之前保存的SharedPreference变量中找到该ID。

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

此外,您必须从意图中获取spaceId:

int spaceId=0;
if(getIntent().hasExtra())
    spaceId=getIntent().getStringExtra("spaceId");

当您重新加载相同的活动而没有额外的意图时,这样做不会给您带来刺激。

或者,您必须传递此spaceId以及您正在使用的意图重新加载相同的活动以显示搜索结果。

希望,你明白了!

答案 2 :(得分:0)

如果您在执行搜索时重新启动相同的活动,您将丢失该值。如果您这样做,重新启动时也会使用intent.putextra()方法将该spaceId传递给重新启动活动

答案 3 :(得分:0)

如同您的问题和评论中一样,如果您的活动被重新创建,我猜你会遇到问题

在活动代码

下的清单文件中添加以下代码
android:configChanges="keyboardHidden|orientation"

您的活动不会再次创建

然后使用您需要的spaceID值

答案 4 :(得分:0)

你说你的活动正在重建。所以你没有在娱乐后获得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);
        }

    }