Return 个片段中可搜索活动的结果
Return results to SearchableActivity in Fragment
情况
正如主题所暗示的,我正在开发一个简单的应用程序,简单到只有几个片段。该应用程序很简单,我可以从在线服务器查询项目。
但是,我想在应用程序中实现搜索。
问题
虽然我在搜索方面有点经验,但我似乎无法让它在我的片段中工作。当我单击 "Search" 时出现空白屏幕,没有结果。
到目前为止我做了什么
到目前为止,我已经写下了我有理由相信我的搜索和截击是好的。也在
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
onCreateView 是灰色的,表示它没有在任何地方被调用或使用。放置的断点也不会被激活。相信我从来没有达到那个 activity。
谢谢
public class MySearchableActivity extends ActionBarActivity {
RequestQueue requestQueue;
List<NumberResults> storiesList = new ArrayList<>();
private RecyclerView recycle;
private Toolbar toolbar;
final Context context = this;
// @Override
//protected void onCreate(Bundle savedInstanceState)
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//super.onCreate(savedInstanceState);
// setContentView(R.layout.fragment_numbers);
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
Log.i(TAG, "in MySearchableActivity");
View layout = inflater.inflate(R.layout.fragment_numbers, container, false);
recycle = (RecyclerView) layout.findViewById(R.id.drawrList);
recycle.setLayoutManager(new LinearLayoutManager(this));
recycle.setHasFixedSize(true);
Intent intent = getIntent();
handleIntent(intent);
return layout;
}
private void handleIntent(Intent intent) {
// get the query out of the intent
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String searchQuery = intent.getStringExtra(SearchManager.QUERY);
doSearchQuery(searchQuery);
}
}
@Override
protected void onNewIntent(Intent intent) {
Log.i(TAG, "in onNewIntent");
setIntent(intent);
handleIntent(intent);
}
private void doSearchQuery(String query) {
final NumAdapters rvAdapter = new NumAdapters(storiesList);
recycle.setAdapter(rvAdapter);
requestQueue = Volley.newRequestQueue(this);
String url = "http://webserver.com/searchablewho.php?owner=" + query;
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
if (response.length() > 0) {
storiesList.clear();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonObject = response.getJSONObject(i);
NumberResults stories = new NumberResults();
if (!jsonObject.isNull("number")) {
stories.name = jsonObject.getString("number");
}
if (!jsonObject.isNull("owner")) {
stories.age = jsonObject.getString("owner");
}
storiesList.add(i, stories);
}
rvAdapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// do something
}
});
requestQueue.add(jsonArrayRequest);
}
您正在扩展 ActionBarActivity 而不是 Fragment。这就是为什么永远不会调用 onCreateView 方法的原因。
情况 正如主题所暗示的,我正在开发一个简单的应用程序,简单到只有几个片段。该应用程序很简单,我可以从在线服务器查询项目。 但是,我想在应用程序中实现搜索。
问题
虽然我在搜索方面有点经验,但我似乎无法让它在我的片段中工作。当我单击 "Search" 时出现空白屏幕,没有结果。
到目前为止我做了什么
到目前为止,我已经写下了我有理由相信我的搜索和截击是好的。也在
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
onCreateView 是灰色的,表示它没有在任何地方被调用或使用。放置的断点也不会被激活。相信我从来没有达到那个 activity。 谢谢
public class MySearchableActivity extends ActionBarActivity {
RequestQueue requestQueue;
List<NumberResults> storiesList = new ArrayList<>();
private RecyclerView recycle;
private Toolbar toolbar;
final Context context = this;
// @Override
//protected void onCreate(Bundle savedInstanceState)
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//super.onCreate(savedInstanceState);
// setContentView(R.layout.fragment_numbers);
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
Log.i(TAG, "in MySearchableActivity");
View layout = inflater.inflate(R.layout.fragment_numbers, container, false);
recycle = (RecyclerView) layout.findViewById(R.id.drawrList);
recycle.setLayoutManager(new LinearLayoutManager(this));
recycle.setHasFixedSize(true);
Intent intent = getIntent();
handleIntent(intent);
return layout;
}
private void handleIntent(Intent intent) {
// get the query out of the intent
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String searchQuery = intent.getStringExtra(SearchManager.QUERY);
doSearchQuery(searchQuery);
}
}
@Override
protected void onNewIntent(Intent intent) {
Log.i(TAG, "in onNewIntent");
setIntent(intent);
handleIntent(intent);
}
private void doSearchQuery(String query) {
final NumAdapters rvAdapter = new NumAdapters(storiesList);
recycle.setAdapter(rvAdapter);
requestQueue = Volley.newRequestQueue(this);
String url = "http://webserver.com/searchablewho.php?owner=" + query;
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
if (response.length() > 0) {
storiesList.clear();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonObject = response.getJSONObject(i);
NumberResults stories = new NumberResults();
if (!jsonObject.isNull("number")) {
stories.name = jsonObject.getString("number");
}
if (!jsonObject.isNull("owner")) {
stories.age = jsonObject.getString("owner");
}
storiesList.add(i, stories);
}
rvAdapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// do something
}
});
requestQueue.add(jsonArrayRequest);
}
您正在扩展 ActionBarActivity 而不是 Fragment。这就是为什么永远不会调用 onCreateView 方法的原因。