如何在单个Activity中收集ArrayList

时间:2011-09-07 18:59:24

标签: android

我正在制作一个应用程序,该应用程序的主要活动有6个图像按钮。 主要活动的代码是

package org.personal.reader;

public class MainActivity extends Activity implements
Button.OnClickListener  {

    ArrayList<String> activeURL =  new ArrayList<String>();
    private Button Done, Refresh;
    int i=0;
    private ImageButton B1, B2, B3, B4, B5, B6;
    public static final String LOG_TAG = "Main Activity";

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Done = (Button)findViewById(R.id.DONE);
        Done.setOnClickListener(this);
        Refresh = (Button)findViewById(R.id.REFRESH);
        Refresh.setOnClickListener(this);
        B1 = (ImageButton)findViewById(R.id.news1);
        B1.setOnClickListener(this);
        B2 = (ImageButton)findViewById(R.id.sports1);
        B2.setOnClickListener(this);
        B3 = (ImageButton)findViewById(R.id.weather1);
        B3.setOnClickListener(this);
        B4 = (ImageButton)findViewById(R.id.entertainment1);
        B4.setOnClickListener(this);
        B5 = (ImageButton)findViewById(R.id.health1);
        B5.setOnClickListener(this);
        B6 = (ImageButton)findViewById(R.id.tech1);
        B6.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        if ( v==B1)
        {
            Intent intent = new Intent(MainActivity.this, Reader.class);
            intent.setAction(Intent.ACTION_MAIN);
            startActivity(intent);

        }

        if ( v==B2 )
        {
            Intent intent = new Intent(MainActivity.this, Reader2.class);
            intent.setAction(Intent.ACTION_MAIN);
            startActivity(intent);
        }

        if ( v==B3 )
        {
            Intent intent = new Intent(MainActivity.this, Reader3.class);
            intent.setAction(Intent.ACTION_MAIN);
            startActivity(intent);
        }

        if ( v==B4 )
        {
            Intent intent = new Intent(MainActivity.this, Reader4.class);
            intent.setAction(Intent.ACTION_MAIN);
            startActivity(intent);
        }

        if ( v==B5 )
        {
            Intent intent = new Intent(MainActivity.this, Reader5.class);
            intent.setAction(Intent.ACTION_MAIN);
            startActivity(intent);
        }

        if ( v==B6 )
        {
            Intent intent = new Intent(MainActivity.this, Reader6.class);
            intent.setAction(Intent.ACTION_MAIN);
            startActivity(intent);
        }
        if (v==Done)
        {   ArrayList<String> array =add();      
            Bundle bundle = new Bundle();
            bundle.putStringArrayList("DONE", array);
            Intent myIntent = new Intent(MainActivity.this,Aggregator.class);
            myIntent.putExtra("agg", array);
            startActivity(myIntent);
        }
    }
    public ArrayList<String> add() 
    {
        Bundle bundle=this.getIntent().getExtras();
        ArrayList<String> temp = bundle.getStringArrayList("reader");
        ArrayList<String> temp1 = new ArrayList<String>();
        temp1=temp;
        if (temp1!=null)
            activeURL.addAll(temp1);
    return activeURL;
   }
}

单击任何单选按钮时,将打开一个新活动。 其中一个活动的代码是

public class Reader extends Activity implements
        Button.OnClickListener {

    /** Called when the activity is first created. */
    private RadioButton RB1, RB2, RB3, RB4, RB5;
    private Button Done;
    ArrayList<String> activeURL1 = new ArrayList<String>();
    public static final String LOG_TAG = "Activity 1";

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main1);
        RB1 = (RadioButton) findViewById(R.id.BBC);
        RB2 = (RadioButton) findViewById(R.id.Guardian);
        RB3 = (RadioButton) findViewById(R.id.msnbc);
        RB4 = (RadioButton) findViewById(R.id.Sky);
        RB5 = (RadioButton) findViewById(R.id.FOX);
        Done = (Button) findViewById(R.id.DONE);
        Done.setOnClickListener(this);
    }

    @Override

    public void onClick(View v) {
        String[] array;
        array = new String[5];

        array[0] = "http://feeds.bbci.co.uk/news/world/rss.xml";
        array[1] = "http://feeds.guardian.co.uk/theguardian/rss";
        array[2] = "http://rss.msnbc.msn.com/id/3032506/device/rss/rss.xml";
        array[3] = "http://news.sky.com/sky-news/rss/world-news/rss.xml";
        array[4] = "http://www.foxnews.com/about/rss/feedburner/foxnews/most-popular";

        if (RB1.isChecked() == true)
            activeURL1.add(array[0]);
        if (RB2.isChecked() == true)
            activeURL1.add(array[1]);
        if (RB3.isChecked() == true)
            activeURL1.add(array[2]);
        if (RB4.isChecked() == true)
            activeURL1.add(array[3]);
        if (RB5.isChecked() == true)
            activeURL1.add(array[4]);

        if(v==Done)
        {   
            Bundle bundle = new Bundle();
            bundle.putStringArrayList("DONE", activeURL1);
            Intent myIntent = new Intent(Reader.this,MainActivity.class);
            myIntent.putExtra("reader", activeURL1);
            startActivity(myIntent);
        }
    }
}

我有6个活动......我需要从每个活动传递一个数组Arraylist并在MainActivity中收集一个Arraylist ...最后将此列表传递给另一个类。

如何从所有活动中传递此列表并将其收集到主要活动中?

3 个答案:

答案 0 :(得分:1)

如果你有一个arraylist,你希望可以在整个系统中访问,你可以在Application类中放置一个holder arraylist,并提供getter和setter,以便他们的系统可以全局使用它。如果它只需要从一个活动移动到另一个活动,我建议将它放在捆绑包中。

答案 1 :(得分:0)

通过尝试它可能正在发挥作用:

        Bundle bundle = new Bundle();
        bundle.putStringArrayList("DONE", activeURL1);
        Intent myIntent = new Intent(Reader.this,MainActivity.class);
        myIntent.**putStringArrayListExtra**("reader", activeURL1);
        startActivity(myIntent);

最佳,

答案 2 :(得分:0)

我会远离每个活动传递一个arraylist,因为这可能会导致一些记忆问题,正如我所发现的那样。更好的方法之一是创建所有活动都可以看到的全局列表。我用我的bluetoothAdapter做了这个,因为检索它有点慢并且设置全局是更快的实现...我会对你的数组列表做同样的事情

public class MyStates extends Application {

    /** The bluetooth adapter for the phone **/
    private BluetoothAdapter blueToothAdapter;

    public BluetoothAdapter getBtState() {
        return this.blueToothAdapter;
    }

    public void setBtState(BluetoothAdapter cust) {
        this.blueToothAdapter = cust;
    }

}