如何从列表视图中为四个不同的字符串数组保存复选框状态

时间:2018-01-28 13:53:42

标签: android listview checkbox

我有一个项目要管理,如果足球自由职业者获得了一个技巧,如TVShowTime应用程序,但有技巧。我有Listview的自定义适配器和四个字符串数组,我不知道如何保存每个技巧的复选框状态。

复选框状态是在CustomAdapter0中配置的。

我遇到的其他问题是复选框需要按两次才能更改,按两次后它可以正常工作。我不知道如何解决这个问题。

ListView and checkboxes

CustomAdapter

public class CustomAdapter0 extends BaseAdapter {

    public CustomAdapter0(String[] tricks, Context context) {
        this.tricks = tricks;
        this.context = context;
    }

    private String[] tricks;
    private Context context;
    private boolean isClicked;
    private LayoutInflater layoutInflater;

    @Override
    public int getCount() {
        return tricks.length;
    }

    @Override
    public Object getItem(int i) {
        return i;
    }

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

    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {

        View row = convertView;

        if(convertView == null){

            layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.custom_listview_tricks, null);
        }

        TextView textView = row.findViewById(R.id.name_xml);
       final ImageButton imageButton = row.findViewById(R.id.unmastered_xml);

        textView.setText(tricks[i]);
        imageButton.setBackgroundResource(R.drawable.unmastered);

        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (isClicked) {
                    imageButton.setBackgroundResource(R.drawable.mastered);
                } else {
                    imageButton.setBackgroundResource(R.drawable.unmastered);
                }
                isClicked = !isClicked;
            }
        });

        return row;
    }
}

TricksActivity

public class TricksActivity extends AppCompatActivity {

    private String[] lower = {

            "ATW - Around the World",
            "HTW - Hop the World",
            "Crossover",
            "Crossover 360",
            "Simple Crossover",
            "Reverse Crossover",
            "KATW - Knee Around the World",
            "KHTW - Knee Hop the World",
            "Toe Bounce",
            "Reverse Toe Bounce",
            "Air Jester",
            "ATL - Around the Leg",
            "Hell Juggles",
            "AATW - Abbas Around the World",
            "HATW - Half Around the World",
            "TATW - Touzani Around the World",
            "MATW - Mitchy Around the World",
            "ATATW - AlternateTouzani Around the World",
            "AMATW - Alternate Mitchy Around the World",
            "HMATW - Homie Mitchy Around the World",
            "HTATW - Homie Touzani Around the World",
            "KAATW - Knee Abbas Around the World",
            "KMATW - Knee Mitchy Around the World",
            "KTATW - Knee Touzani Around the World",
            "LEBATW - Lebioda Around the World",
            "LATW - Lemmens Around the World",
            "MAATW - Mitchy Abbas Around the World",
            "RATW - Ratinho Around the World",
            "ATL - Around the Leg",
            "360 ATW",
            "Clipper",
            "JATOW - Joshua Around the Oppositive World",
            "Sagami Aroudn the World",
            "YATW - Yosuke Around the World",
            "Timo ATW",
            "Knee Timo ATW",
            "Air Jester",
            "Eclipse",
            "Half New Shit",
            "ALATW - Alternate Lemmens Around the World",
            "BATW - Beck Around the World",
            "HJATW - Homie Jay Around the World",
            "HMAATW - Homie Mitchy Abbas Around the World",
            "HTAATW - Homie Touzani Abbas Around the World",
            "KAMATW - Knee Alternate Mitchy Around the World",
            "KATATW - Knee Alternate Touzani Around the World",
            "KMAATW - Knee Mitchy Alternate Around the World",
            "LAATW - Lemmens Abbas Around the World",
            "LMATW - Lemmens Mitchy Around the World",
            "LTATW - Lemmens Touzani Around the World",
            "Magellan",
            "New Shit",
            "Palle Trick",
            "Reverse Palle Trick",
            "Toe Stall",
            "Hell Stall",
            "Knee Stall",
            "Hell Juggles",
            "Spin Magic",
            "MichRyc Move",
            "AHMATW - Alternate Homie Mitchy Around the World",
            "AHTATW - Alternate Homie Touzani Around the World",
            "ALMATW - Alternate Lemmens Mitchy Around the World",
            "KLAATW - Knee Lemmens Abbas Around the World",
            "SATW - Skora Around the World",
            "Skora Move",
            "RSATW - Reverse Skora Around the World",
            " HTLATW - Homie Touzani Lemmens Around the World",
            "SZATW - Szymo Around The World",
            "EATW - Eldo Around the World",
            "SKATW - Skala Around the World",
            "ZATW - Zegan Around the World",
            "K3EATW - K3vin Eldo Around the World",
            "SKMATW - Skala Mitchy Around the World",
            "EMATW - Eldo Mitchy Around the World",
            "AEATW - Alternate Eldo Around the World",
            "PATW - Palle Around the World",
            "PMATW - Palle Mitchy Around the World",
            "APATW - Alternate Palle Around the World"

    };

    private String[] upper = {

            "Head Stall",
            "Top Head Stall",
            "Side Head Stall",
            "Shoulder Stall",
            "Neck Stall",
            "360",
            "Chest Stall",
            "ATM - Around The Moon",
            "Carousel",
            "Pavel Roll",
            "LIP Stall",
            "Arm Roll",
            "Nose Stall",
            "Neck Flick",
            "LATM - Luki Around the Moon",

    };
    private String[] sitDown = {

            "Shin Stall",
            "Sole Stall",
            "Abdullah",
            "Sole Juggle",
            "Shin ATW",
            "Dimetto"

    };
    private String[] combosFamosos= {

            "CNK NT Combo",
            "Skóra NT Combo",
            "Palle Combo",
            "Palle Combo 2"

    };

    private ImageView imageView;


    private int codigo;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tricks);

        Intent intent = getIntent();
        codigo = intent.getIntExtra("codigo", 0);

        //Toast.makeText(this, ""+codigo, Toast.LENGTH_SHORT).show();

        listView = findViewById(R.id.listview_xml);


        if (codigo == 0){
            CustomAdapter0 customAdapter0 = new CustomAdapter0(lower, TricksActivity.this);
            listView.setAdapter(customAdapter0);

        }if (codigo == 1){

            CustomAdapter0 customAdapter0 = new CustomAdapter0(upper, TricksActivity.this);
            listView.setAdapter(customAdapter0);

        }if (codigo == 2){

            CustomAdapter0 customAdapter0 = new CustomAdapter0(sitDown, TricksActivity.this);
            listView.setAdapter(customAdapter0);

        }if (codigo == 3){

            CustomAdapter0 customAdapter0 = new CustomAdapter0(combosFamosos, TricksActivity.this);
            listView.setAdapter(customAdapter0);

        }if (codigo == 4){


        }

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Intent intent = new Intent(getApplicationContext(), VideoActivity.class);

                if(codigo == 0){

                    //Toast.makeText(TricksActivity.this, ""+lower[i], Toast.LENGTH_SHORT).show();
                    intent.putExtra("trick", lower[i]);

                }
                if(codigo == 1){

                    //Toast.makeText(TricksActivity.this, ""+upper[i], Toast.LENGTH_SHORT).show();
                    intent.putExtra("trick", upper[i]);

                }
                if(codigo == 2){

                    //Toast.makeText(TricksActivity.this, ""+sitDown[i], Toast.LENGTH_SHORT).show();
                    intent.putExtra("trick", sitDown[i]);

                }
                if(codigo == 3){

                   //Toast.makeText(TricksActivity.this, ""+combosFamosos[i], Toast.LENGTH_SHORT).show();
                    intent.putExtra("trick", combosFamosos[i]);

                }
                startActivity(intent);
                }

            });

    }

}

1 个答案:

答案 0 :(得分:0)

您的适配器代码只关注&#39; isClicked&#39;只有一个项目。尝试使用此适配器代码,它会保持“点击”状态。每个项目:

public class CustomAdapter0 extends BaseAdapter {

public CustomAdapter0(String[] tricks, Context context) {
    this.tricks = tricks;
    this.context = context;
    isClicked = new boolean[tricks.length];
    for(int i = 0; i < isClicked.length; i++) isClicked[i] = false;
}

private String[] tricks;
private Context context;
//private boolean isClicked;
private boolean[] isClicked;
private LayoutInflater layoutInflater;

@Override
public int getCount() {
    return tricks.length;
}

@Override
public Object getItem(int i) {
    return tricks[i];
}

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

@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {

    View row = convertView;

    if(convertView == null){

        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.custom_listview_tricks, null);
    }

    TextView textView = row.findViewById(R.id.name_xml);
    ImageButton imageButton = row.findViewById(R.id.unmastered_xml);

    textView.setText(tricks[i]);
    if (isClicked[i]) imageButton.setBackgroundResource(R.drawable.mastered);
    else imageButton.setBackgroundResource(R.drawable.unmastered);

    imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            ImageButton clcikedView = (ImageButton) view;
            int clickedPosition = (int)clickedView.getTag();
            isClicked[clickedPosition] = !isClicked[clickedPosition];
            notifyDataSetChanged();
        }
    });

    imageButton.setTag(i);
    return row;
}
}

希望它有所帮助!