Java 两个活动之间的共享arraylist不';行不通

Java 两个活动之间的共享arraylist不';行不通,java,android,listview,android-activity,android-arrayadapter,Java,Android,Listview,Android Activity,Android Arrayadapter,我有一个问题,当我在checkedbox中选择我的项目时(因此它变成选中状态),数组已经填充,但当我单击“完成”时,称为新活动GenreViewActivity,它调用了获取上一个活动的arraylist的方法,但是它的ListView,布局是空的。我怎么了 AccountActivity.java: package com.example.msnma.movienotifier; import android.app.Activity; import android.content.Co

我有一个问题,当我在checkedbox中选择我的项目时(因此它变成选中状态),数组已经填充,但当我单击“完成”时,称为新活动GenreViewActivity,它调用了获取上一个活动的arraylist的方法,但是它的ListView,布局是空的。我怎么了

AccountActivity.java:

package com.example.msnma.movienotifier;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class AccountActivity extends AppCompatActivity 
{
    private static ArrayList <String> itemsChkStr = new ArrayList<String();

public class Item 
{
        boolean checked;
        Drawable ItemDrawable;
        String ItemString;
        Item(/*Drawable drawable,*/ String t, boolean b)
        {
            //ItemDrawable = drawable;
            ItemString = t;
            checked = b;
        }

        public boolean isChecked()
        {
            return checked;
        }
    }

    static class ViewHolder 
    {
        CheckBox checkBox;
        ImageView icon;
        TextView text;
    }

    public class ItemsListAdapter extends BaseAdapter 
    {

        private Context context;
        private List<Item> list;

        ItemsListAdapter(Context c, List<Item> l) 
        {
            context = c;
            list = l;
        }

        @Override
        public int getCount() 
        {
            return list.size();
        }

        @Override
        public Object getItem(int position) 
        {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) 
        {
            return position;
        }

        public boolean isChecked(int position) 
        {
            return list.get(position).checked;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) 
        {
            View rowView = convertView;

            // reuse views
            ViewHolder viewHolder = new ViewHolder();
            if (rowView == null) {
                LayoutInflater inflater = ((Activity) 
                 context).getLayoutInflater();
                rowView = inflater.inflate(R.layout.row, null);

                viewHolder.checkBox = (CheckBox) 
                 rowView.findViewById(R.id.rowCheckBox);
                //viewHolder.icon = (ImageView) 
                   rowView.findViewById(R.id.rowImageView);
                viewHolder.text = (TextView) 
                   rowView.findViewById(R.id.rowTextView);
                rowView.setTag(viewHolder);
                } 
                else 
                {
                 viewHolder = (ViewHolder) rowView.getTag();
                }

            //viewHolder.icon.setImageDrawable(list.get(position).ItemDrawable);
            viewHolder.checkBox.setChecked(list.get(position).checked);

            final String itemStr = list.get(position).ItemString;
            viewHolder.text.setText(itemStr);

            viewHolder.checkBox.setTag(position);

            /*
            viewHolder.checkBox.setOnCheckedChangeListener(
                    new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton 
                     compoundButton, boolean b) 
                {
                    list.get(position).checked = b;

                    Toast.makeText(getApplicationContext(),
                            itemStr + "onCheckedChanged\nchecked: " + b,
                            Toast.LENGTH_LONG).show();
                }
            });
            */

            viewHolder.checkBox.setOnClickListener(new 
                  View.OnClickListener() 
            {
                @Override
                public void onClick(View view) {
                    boolean newState = !list.get(position).isChecked();
                    list.get(position).checked = newState;
                    Toast.makeText(getApplicationContext(),
                            itemStr + "setOnClickListener\nchecked: " + newState,
                            Toast.LENGTH_LONG).show();
                }
            });

            viewHolder.checkBox.setChecked(isChecked(position));

            return rowView;
        }
    }

    Button btnLookup;
    Button btnDone;
    List<Item> items;
    ListView listView;
    ItemsListAdapter myItemsListAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_account);
        listView = (ListView)findViewById(R.id.listview);
        btnLookup = (Button)findViewById(R.id.lookup);
        btnDone = (Button) findViewById(R.id.done);

        initItems();
        myItemsListAdapter = new ItemsListAdapter(this, items);
        listView.setAdapter(myItemsListAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                Toast.makeText(AccountActivity.this,
                        ((Item)(parent.getItemAtPosition(position))).ItemString,
                        Toast.LENGTH_LONG).show();
            }});

        //Arraylist di tipo stringa con elementi checked

        for (int i=0; i<items.size(); i++){
            if (items.get(i).isChecked()){
                //str += i + "\n";
                itemsChkStr.add(items.get(i).ItemString);
            }
        }

        btnLookup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String str = "Check items:\n";

                for (int i=0; i<items.size(); i++){
                    if (items.get(i).isChecked()){
                        //str += i + "\n";
                        str += items.get(i).ItemString;
                    }
                }

                /*
                int cnt = myItemsListAdapter.getCount();
                for (int i=0; i<cnt; i++){
                    if(myItemsListAdapter.isChecked(i)){
                        str += i + "\n";
                    }
                }
                */

                Toast.makeText(AccountActivity.this,
                        str,
                        Toast.LENGTH_LONG).show();

            }
        });
    }

    private void initItems(){
        items = new ArrayList<Item>();

        TypedArray arrayDrawable = getResources().obtainTypedArray(R.array.resicon);
        TypedArray arrayText = getResources().obtainTypedArray(R.array.restext);

        for(int i=0; i<arrayDrawable.length(); i++){
            //Drawable d = arrayDrawable.getDrawable(i);
            String s = arrayText.getString(i);
            boolean b = false;
            Item item = new Item(/*d,*/ s, b);
            items.add(item);
        }

        arrayDrawable.recycle();
        arrayText.recycle();
    }

    public void pressDoneButton(View view)
    {
        //itemsChecks();
        Intent intent = new Intent(this, GenreViewActivity.class);
        //EditText editText = (EditText) findViewById(R.id.editText);
        //String message = editText.getText().toString();
        //intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }

    /*public ArrayList <String> itemsChecks()
    {
        ArrayList <String> arrGenre = new ArrayList<String>();
        for (int i=0; i<items.size(); i++){
            if (items.get(i).isChecked()){
                arrGenre.add(items.get(i).toString());
            }
        }
        viewArray(arrGenre);

    }*/

    public static ArrayList <String> getSelectedString(){
        return itemsChkStr;
    }

}
    /*@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_account);
        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);
        // Get a support ActionBar corresponding to this toolbar
        ActionBar ab = getSupportActionBar();

        // Enable the Up button
        ab.setDisplayHomeAsUpEnabled(true);

    }

    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_second, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings)
        {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void pressAccountButton(MenuItem item) {
        Intent intent = new Intent(this, AccountActivity.class);
        //EditText editText = (EditText) findViewById(R.id.editText);
        //String message = editText.getText().toString();
        //intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }*/
package com.example.msnma.movienotifier;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.content.res.TypedArray;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.CheckBox;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.ArrayList;
导入java.util.List;
公共类AccountActivity扩展了AppCompatActivity
{

private static ArrayList itemsChkStr=new ArrayList当然它将是空的。在尝试进行检查之前,您仅在begin中填写静态数组itemsChkStr。每次检查操作后,您需要更新静态检查列表。

使用putStringArrayListExtra传递ArrayList

public void pressDoneButton(View view)
    {
        //itemsChecks();
        Intent intent = new Intent(this, GenreViewActivity.class);
        intent.putStringArrayListExtra("your_list",itemsChkStr);
        startActivity(intent);
    }
并使用
intent.getStringArrayListExtra(“您的列表”)
获取ArrayList

public void pressDoneButton(View view)
    {
        //itemsChecks();
        Intent intent = new Intent(this, GenreViewActivity.class);
        intent.putStringArrayListExtra("your_list",itemsChkStr);
        startActivity(intent);
    }
在你的GenreViewActivity中

if(getIntent()!=null){
your_array_list = getIntent().getStringArrayListExtra("your_list");
}

你能清理你的代码吗?删除注释掉的代码code@user47845您需要在
checkBox.setOnClickListener方法下添加这一行
itemsChkStr.add(list.get(position.ItemString);
。实际上是:)
if(getIntent()!=null){
your_array_list = getIntent().getStringArrayListExtra("your_list");
}