我已经有一段时间了,我有一个问题:
此时我能够:
1 - 使用我的数据库中的数据制作自定义列表视图 - 此部分已完成。 2 - 使用搜索过滤器制作自定义列表视图。
所以,我现在尝试使用搜索过滤器制作自定义列表视图。
事情是,我努力奋斗,而且我没有太多时间,而且我发现的唯一解决方案是:
在onPostExecute上,我运行以下代码:
for(int i=0; i<jsonArray.length();i++){
JSONObject json = null;
try {
json = jsonArray.getJSONObject(i);
listId.add(json.getString("id"));
listNome.add(json.getString("name"));
listTipo.add(json.getString("type"));
} catch (JSONException e) {
e.printStackTrace();
}
}
String[] arrId = listId.toArray(new String[listId.size()]);//StringArray de ID's
String[] arrName = listNome.toArray(new String[listName.size()]); //
String[] arrType = listTipo.toArray(new String[listType.size()]);
tvJson.setText(Arrays.toString(arrName));
Intent i = new Intent (MainActivity.this, NextActivity.class);
i.putExtra("KEY_ID", arrId);
i.putExtra("KEY_TIPO", arrTipo);
i.putExtra("KEY_NOME", arrNome);
startActivity(i);
}
正如您所看到的,这不是一个完美的解决方案,但我需要这些字符串数组来制作我的自定义列表视图。
如果我将它们放在NextActivity上我的所有代码都运行顺利,那就是,我不想开始一个活动,我想把这个数组放到Main Activity中,之后构建我的listview。
那么,有什么方法可以将这3个字符串[]发送给MainActivity吗?
PS:它不是有史以来最优雅的代码,但我是新手,我有一个项目的最后期限 - 这是我不尝试的主要原因重写所有这些代码。答案 0 :(得分:0)
关于广播,您需要设置您的活动以准备接收广播。将其添加到您的MainActivity:
private SimpleBroadcastReceiver mReceiver;
@Override
public void onResume(){
super.onResume();
mReceiver = new SimpleBroadcastReceiver();
registerReceiver(mReceiver, new IntentFilter("com.your_package.package.SOME_KEY"));
}
@Override
public void onPause(){
super.onPause();
unregisterReceiver(mReceiver);
}
public class SimpleBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// Get your intent extras like you were doing in your new activity
}
}
现在,您的MainActivity已准备好接收广播,并针对操作"com.your_package.package.SOME_KEY"
进行过滤。现在您只需要从onPostExecute()发送广播。但是,要执行此操作,您需要访问应用程序上下文。为此,您可以为AsyncTask类创建一个构造函数,该构造函数获取上下文作为其参数
public class MyAsyncTask extends AsyncTask<Void, Void, Void>{
private Context context;
public MyAsyncTask(Context context){
this.context = context;
}
}
您现在可以从Activity中利用此AsyncTask,如下所示
new MyAsyncTask(this).execute();
现在您可以访问您的上下文,您可以按如下方式完成onPostExecute()
:
//in onPostExecute instead of starting your new activity
Intent i = new Intent("com.your_package.package.SOME_KEY");
context.sendBroadcast(i);
显然,这需要进行一些修改以适应你正在做的事情,但这是一般的想法。