Android 从列表视图开始时的控件复选标记:简单\u列表\u项目\u单个\u选项 我希望保留选中标记的信息,我尝试这样做的方式是通过控制一个选中标记在开始时是真是假

Android 从列表视图开始时的控件复选标记:简单\u列表\u项目\u单个\u选项 我希望保留选中标记的信息,我尝试这样做的方式是通过控制一个选中标记在开始时是真是假,android,listview,Android,Listview,我尝试使用setItemChecked(I,true)将所有这些设置都设置为true,但它不起作用 ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(Main2Activity.this, android.R.layout.simple_list_item_single_choice, getResources().getStringArray(

我尝试使用setItemChecked(I,true)将所有这些设置都设置为true,但它不起作用

ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(Main2Activity.this,
                android.R.layout.simple_list_item_single_choice,
                getResources().getStringArray(R.array.Stigmate_P));
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

listView.setItemChecked(0,true);
listView.setItemChecked(1,true);
listView.setItemChecked(2,true);
ArrayAdapter mAdapter=新的ArrayAdapter(Main2Activity.this、,
android.R.layout.simple\u list\u item\u单选,
getResources().getStringArray(R.array.stumate_P));
listView.setChoiceMode(listView.CHOICE\u MODE\u MULTIPLE);
setItemChecked(0,true);
setItemChecked(1,true);
setItemChecked(2,true);
  • 当我使用setOnItemClickListener时,我不想更改复选标记的状态。我已经找到了这样做的方法,但我肯定这不是最好的方法
  • listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
    @凌驾
    public void onItemClick(AdapterView父项、视图、int i、long id){
    如果(Var[i]==2){
    setItemChecked(i,true);
    }
    else if(Var[i]==1){
    setItemChecked(i,false);
    }
    }
    
    下面是我的listview的大部分java代码

    public class Main2Activity extends AppCompatActivity {
    public static int POSITION;
    public static int Var[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    
    private Toolbar mActionBarToolbar;
    ListView listView;
    ImageView ImageView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        if (POSITION == 0){
            setContentView(R.layout.activity_main4);
            mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
            setSupportActionBar(mActionBarToolbar);
            setSupportActionBar(mActionBarToolbar);
            getSupportActionBar().setTitle(" ");}
    
        if (POSITION == 1){
    
            setContentView(R.layout.activity_main2);
            mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(mActionBarToolbar);
            getSupportActionBar().setTitle("Stigmate");
    
            ImageView = (ImageView)findViewById(R.id.imageView2);
            ImageView.setImageResource(R.drawable.r_stigmate);
            listView = (ListView)findViewById(R.id.mainMenu2);
    
            ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(Main2Activity.this,
                    android.R.layout.simple_list_item_single_choice,
                    getResources().getStringArray(R.array.Stigmate_P));
            listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    
            listView.setItemChecked(0,true);
            listView.setItemChecked(1,true);
            listView.setItemChecked(2,true);
    
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
                    if (Var[i] == 2){
                        listView.setItemChecked(i,true);
                    }
                    else if (Var[i] == 1){
                        listView.setItemChecked(i,false);
                    }
    
                    Intent intent = new Intent(Main2Activity.this, Main3Activity.class);
                    intent.putExtra("CountryName",listView.getItemAtPosition(i).toString());
                    startActivity(intent);
    
                    int n = 0;
                    for (n= 0; n < 20 ; n++) {
                        if(i==n){
                            Main3Activity.POSITION3 = n;
                        }}
                }
            });
    
            listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
    
                public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                               int pos, long id) {
                    if (Var[pos] == 1){
                        listView.setItemChecked(pos,true);
                        Var[pos] = 2;
                    }
                    else if (Var[pos] == 2){
                        listView.setItemChecked(pos,false);
                        Var[pos] = 1;
                    }
                    return true;
                }
            });
            listView.setAdapter(mAdapter);
        }
    ...
    
    公共类Main2活动扩展了AppCompative活动{
    公共静态位置;
    公共静态int-Var[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    专用工具栏mActionBarToolbar;
    列表视图列表视图;
    图像视图图像视图;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    如果(位置==0){
    setContentView(R.layout.activity_main4);
    mActionBarToolbar=(工具栏)findViewById(R.id.Toolbar\u actionbar);
    设置支持操作栏(mActionBarToolbar);
    设置支持操作栏(mActionBarToolbar);
    getSupportActionBar().setTitle(“”;}
    如果(位置==1){
    setContentView(R.layout.activity_main2);
    mActionBarToolbar=(工具栏)findViewById(R.id.Toolbar);
    设置支持操作栏(mActionBarToolbar);
    getSupportActionBar().setTitle(“标记”);
    ImageView=(ImageView)findViewById(R.id.imageView2);
    setImageResource(R.drawable.R_stimate);
    listView=(listView)findViewById(R.id.mainMenu2);
    ArrayAdapter mAdapter=新的ArrayAdapter(Main2Activity.this,
    android.R.layout.simple\u list\u item\u单选,
    getResources().getStringArray(R.array.stumate_P));
    listView.setChoiceMode(listView.CHOICE\u MODE\u MULTIPLE);
    setItemChecked(0,true);
    setItemChecked(1,true);
    setItemChecked(2,true);
    setOnItemClickListener(新的AdapterView.OnItemClickListener(){
    @凌驾
    public void onItemClick(AdapterView父项、视图、int i、long id){
    如果(Var[i]==2){
    setItemChecked(i,true);
    }
    else if(Var[i]==1){
    setItemChecked(i,false);
    }
    意向意向=新意向(Main2Activity.this、Main3Activity.class);
    intent.putExtra(“CountryName”,listView.getItemAtPosition(i.toString());
    星触觉(意向);
    int n=0;
    对于(n=0;n<20;n++){
    如果(i==n){
    Main3活动位置3=n;
    }}
    }
    });
    setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
    @凌驾
    长单击(AdapterView arg0、视图arg1、,
    内部位置,长id){
    如果(变量[pos]==1){
    listView.setItemChecked(pos,true);
    Var[pos]=2;
    }
    否则如果(变量[pos]==2){
    listView.setItemChecked(pos,false);
    Var[pos]=1;
    }
    返回true;
    }
    });
    setAdapter(mAdapter);
    }
    ...
    

    提前感谢。

    首先需要设置适配器,然后将可检查项设置为已检查

    请检查注释布局是否正确

    android.R.layout.simple\u list\u item\u多选不是android.R.layout.simple\u list\u item\u单选

    试试下面的代码

    public class Main2Activity extends AppCompatActivity {
    public static int POSITION;
    public static int Var[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    
    
    private Toolbar mActionBarToolbar; 
    ListView listView;
    ImageView ImageView;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    
    if (POSITION == 0){
        setContentView(R.layout.activity_main4);
        mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
        setSupportActionBar(mActionBarToolbar);
        setSupportActionBar(mActionBarToolbar);
        getSupportActionBar().setTitle(" ");}
    
    
    if (POSITION == 1){
    
        setContentView(R.layout.activity_main2);
        mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mActionBarToolbar);
        getSupportActionBar().setTitle("Stigmate");
    
    
        ImageView = (ImageView)findViewById(R.id.imageView2);
        ImageView.setImageResource(R.drawable.r_stigmate);
        listView = (ListView)findViewById(R.id.mainMenu2);
    
    
     // make note : android.R.layout.simple_list_item_multiple_choice not android.R.layout.simple_list_item_single_choice 
        ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(Main2Activity.this,
                android.R.layout.simple_list_item_multiple_choice,
                getResources().getStringArray(R.array.Stigmate_P));
    
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        // add this lines after you set the adapter 
        /*listView.setItemChecked(0,true);
        listView.setItemChecked(1,true);
        listView.setItemChecked(2,true);*/
    
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
    
                if (Var[i] == 2){
                    listView.setItemChecked(i,true);
                }
                else if (Var[i] == 1){
                    listView.setItemChecked(i,false);
    
                }
    
    
                Intent intent = new Intent(Main2Activity.this, Main3Activity.class);
                intent.putExtra("CountryName",listView.getItemAtPosition(i).toString());
                startActivity(intent);
    
    
    
                int n = 0;
                for (n= 0; n < 20 ; n++) {
                    if(i==n){
                        Main3Activity.POSITION3 = n;
                    }}
    
            }
    
        });
    
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
    
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                           int pos, long id) {
    
                if (Var[pos] == 1){
                    listView.setItemChecked(pos,true);
                    Var[pos] = 2;
                }
                else if (Var[pos] == 2){
                    listView.setItemChecked(pos,false);
                    Var[pos] = 1;
                }
    
                return true;
            }
        });
        listView.setAdapter(mAdapter);
    
     // here you should set checked items 
        listView.setItemChecked(0,true);
        listView.setItemChecked(1,true);
        listView.setItemChecked(2,true);
    
    
    }
    
    公共类Main2活动扩展了AppCompative活动{
    公共静态位置;
    公共静态int-Var[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    专用工具栏mActionBarToolbar;
    列表视图列表视图;
    图像视图图像视图;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    如果(位置==0){
    setContentView(R.layout.activity_main4);
    mActionBarToolbar=(工具栏)findViewById(R.id.Toolbar\u actionbar);
    设置支持操作栏(mActionBarToolbar);
    设置支持操作栏(mActionBarToolbar);
    getSupportActionBar().setTitle(“”;}
    如果(位置==1){
    setContentView(R.layout.activity_main2);
    mActionBarToolbar=(工具栏)findViewById(R.id.Toolbar);
    设置支持操作栏(mActionBarToolbar);
    getSupportActionBar().setTitle(“标记”);
    ImageView=(ImageView)findViewById(R.id.imageView2);
    setImageResource(R.drawable.R_stimate);
    listView=(listView)findViewById(R.id.mainMenu2);
    //注意:android.R.layout.simple\u list\u item\u多选项而非android.R.layout.simple\u list\u item\u单选
    ArrayAdapter mAdapter=新的ArrayAdapter(Main2Activity.this,
    android.R.layout.simple\u list\u item\u多选,
    getResources().getStringArray(R.array.stumate_P));
    listView.setChoiceMode(listView.CHOICE\u MODE\u MULTIPLE);
    //设置适配器后添加此行
    /*setItemChecked(0,true);
    setItemChecked(1,true);
    setItemChecked(2,true)*/
    listView.setO
    
    public class Main2Activity extends AppCompatActivity {
    public static int POSITION;
    public static int Var[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    
    
    private Toolbar mActionBarToolbar; 
    ListView listView;
    ImageView ImageView;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    
    if (POSITION == 0){
        setContentView(R.layout.activity_main4);
        mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
        setSupportActionBar(mActionBarToolbar);
        setSupportActionBar(mActionBarToolbar);
        getSupportActionBar().setTitle(" ");}
    
    
    if (POSITION == 1){
    
        setContentView(R.layout.activity_main2);
        mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mActionBarToolbar);
        getSupportActionBar().setTitle("Stigmate");
    
    
        ImageView = (ImageView)findViewById(R.id.imageView2);
        ImageView.setImageResource(R.drawable.r_stigmate);
        listView = (ListView)findViewById(R.id.mainMenu2);
    
    
     // make note : android.R.layout.simple_list_item_multiple_choice not android.R.layout.simple_list_item_single_choice 
        ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(Main2Activity.this,
                android.R.layout.simple_list_item_multiple_choice,
                getResources().getStringArray(R.array.Stigmate_P));
    
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        // add this lines after you set the adapter 
        /*listView.setItemChecked(0,true);
        listView.setItemChecked(1,true);
        listView.setItemChecked(2,true);*/
    
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
    
                if (Var[i] == 2){
                    listView.setItemChecked(i,true);
                }
                else if (Var[i] == 1){
                    listView.setItemChecked(i,false);
    
                }
    
    
                Intent intent = new Intent(Main2Activity.this, Main3Activity.class);
                intent.putExtra("CountryName",listView.getItemAtPosition(i).toString());
                startActivity(intent);
    
    
    
                int n = 0;
                for (n= 0; n < 20 ; n++) {
                    if(i==n){
                        Main3Activity.POSITION3 = n;
                    }}
    
            }
    
        });
    
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
    
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                           int pos, long id) {
    
                if (Var[pos] == 1){
                    listView.setItemChecked(pos,true);
                    Var[pos] = 2;
                }
                else if (Var[pos] == 2){
                    listView.setItemChecked(pos,false);
                    Var[pos] = 1;
                }
    
                return true;
            }
        });
        listView.setAdapter(mAdapter);
    
     // here you should set checked items 
        listView.setItemChecked(0,true);
        listView.setItemChecked(1,true);
        listView.setItemChecked(2,true);
    
    
    }