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