将列表从第1个活动传递到第3个活动

时间:2016-03-04 09:22:42

标签: android listview object android-sharedpreferences

我有一个启动画面活动( ACTIVITY A ),在加载完成后会打开 ACTIVITY B

ACTIVITY B **包含一个按钮,可打开** ACTIVITY C

ACTIVITY A 使用异步任务加载列表

我希望这个加载的列表在打开时显示在 ACTIVITY C

我已经阅读了很多关于如何将值从第一个活动传递到第三个活动的帖子,并尝试实施所有这些但没有任何帮助

Evven尝试通过 ACTIVITY A >中的意图传递列表对象 ACT?VITY B > ACTIVITY C ,但没有工作

最后我使用“jacksons库”将加载的列表转换为jsonstring,然后将其放在 ACTIVITY A 的共享偏好中,然后从共享偏好中检索jsonstring将其转换回**中的列表对象ACTIVITY C **并显示列表

但是列表没有显示

该怎么做,是否有更好的过程

启动活动(ACTIVITY A)

public class SplashActivity extends Activity{

    List<ParseObject> ob;
    List<CodeList> codelist = null;
    ObjectMapper mapper;
    SearchPreferences searchpref;

    @Override
    public void onCreate(Bundle savedInstanceState){
        // TODO: Implement this method
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        mapper = new ObjectMapper();
        searchpref = new SearchPreferences();

        new DataTask().execute();
    }

    public class DataTask extends AsyncTask<Void, Void, List<CodeList>>{
        @Override
        protected List<CodeList> doInBackground(Void[] p1){    
            codelist = new ArrayList<CodeList>();
            try {
                ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("InterActivity");

                query.orderByAscending("_created_at");

                ob = query.find();
                for (ParseObject inter : ob) {
                    CodeList map = new CodeList();
                    map.setIntroduction((String) inter.get("intro"));
                    codelist.add(map);
                }
                return codelist;
            } 
            catch (ParseException e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(List<CodeList> result){
            try{
                String jsonsearchlist = mapper.writeValueAsString(result);
                Intent i = new Intent(SplashActivity.this, MainActivity.class);

                searchpref.save(SplashActivity.this, jsonsearchlist);

                startActivity(i);
            }
            catch (JsonProcessingException e){}
        }
    }
}

ACTIVITY C

public class SearchActivity extends Activity{

    protected  EditText searchedittext;
    ImageButton searchButton;
    List<ParseObject> ob;
    List<CodeList> splashcodes;
    FinalAdapter fnladapter;

    SearchPreferences searchpref;
    ObjectMapper mapper;

    @Override
    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.search_layout);

        searchpref = new SearchPreferences();
        mapper = new ObjectMapper();

        String jsonsearchobj = searchpref.getValue(SearchActivity.this);

        try{
             splashcodes = (List<CodeList>) mapper.readValue(jsonsearchobj, CodeList.class);

            final ListView searchedlist = (ListView) findViewById(R.id.searchlist);
            fnladapter = new FinalAdapter(SearchActivity.this, splashcodes);
            searchedlist.setAdapter(fnladapter);
        }
        catch (IOException e){}
    }
}

2 个答案:

答案 0 :(得分:1)

您走在正确的道路上:通过第二个活动循环您的信息。请注意,CodeList必须是可序列化的。

public class SplashActivity extends Activity{
 ...
 protected void onPostExecute(ArrayList<CodeList> result){
   Intent intent = new Intent(SplashActivity.this, SoCalledBActivity.class);
   intent.putExtra("YOUR_UNIQUE_KEY",result);
   this.startActivity(intent);
 }
}

public class SoCalledBActivity extends Activity{
 ...
 Button trigger = (Button) findViewById(R.id.trigger);
    trigger.setOnClickListener(new Button.OnClickListener() {
        public void onClick(View v) {
          //get result list
          ArrayList<CodeList> result = (ArrayList<CodeList>) this.getIntent().getExtras().get("YOUR_UNIQUE_KEY");
          Intent intent = new Intent(SoCalledBActivity.this, SearchActivity .class);
          //add list for C activity
          intent.putExtra("YOUR_UNIQUE_KEY",result);
          this.startActivity(intent);
        }
    });

public class SearchActivity extends Activity{
  ...
  public void onCreate(Bundle savedInstanceState){
   //extract list
   ArrayList<CodeList> result = (ArrayList<CodeList>) this.getIntent().getExtras().get("YOUR_UNIQUE_KEY");
   //do whatever you want with your list...
  }
...
}

答案 1 :(得分:0)

创建一个全局类并将该列表放在该类中。填写完列表后,访问活动C中的列表数据。