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