2016-08-30 4 views
2

Zuerst wähle ich einige Array-Artikel mit Checkbox und zeigt es in der zweiten Aktivität. Danach öffne ich wieder meine erste Aktivität von ArrayList, aber meine Checkbox Auswahl wird gelöscht.Wie vorgewähltes Kontrollkästchen anzeigen, wenn wieder Arraylist in Android öffnen

Unten ist mein Code

public class Occassion extends AppCompatActivity implements View.OnClickListener,AdapterView.OnItemClickListener { 

ListView listView_occassion; 
ArrayAdapter<String> adapterOccassion; 
Button mButtonOccassionNext; 
int position; 

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

    listView_occassion = (ListView) findViewById(R.id.occassion_listview); 
    mButtonOccassionNext = (Button) findViewById(R.id.btn_occassion_next); 

    listView_occassion.setOnItemClickListener(this); 

    String[] Occassion = getResources().getStringArray(R.array.occassion_array); 

    adapterOccassion = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_multiple_choice, Occassion); 


    listView_occassion.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    listView_occassion.setAdapter(adapterOccassion); 
    mButtonOccassionNext.setOnClickListener(this); 

} 

@Override 
public void onClick(View view) { 

    Intent intent = new Intent(getApplicationContext(),Filters.class); 
    startActivity(intent); 

} 

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

    SparseBooleanArray checked = listView_occassion.getCheckedItemPositions(); 

    ArrayList<String> selectedItemsOccassion = new ArrayList<String>(); 
    Utils.occassionArrayList.clear(); 

    for (i = 0; i < checked.size(); i++) { 
     // Item position in adapter 
     int position = checked.keyAt(i); 
     // Add sport if it is checked i.e.) == TRUE! 
     if (checked.valueAt(i)) 
      // selectedItemsFlavour.add(adapterFlavour.getItem(position)); 
      Utils.occassionArrayList.add(adapterOccassion.getItem(position)); 
    } 

} 

}

Anzeige zweite Aktivität als Ergebnis ..

mtv_occassion_status = (TextView) findViewById(R.id.tv_occassion_status); 

if(!Utils.occassionArrayList.isEmpty()){ 
     String tempOccassion= String.valueOf(Utils.occassionArrayList); 
     mtv_occassion_status.setText(tempOccassion); 
    } 

Und Liste meiner Array in String.xml hinzufügen

<string-array name="occassion_array"> 
    <item>Birthday</item> 
    <item>Wedding</item> 
    <item>Anniversary</item> 
    <item>Celebration</item> 
    <item>Get Well Soon</item> 
    <item>House warming</item> 
    <item>Valentines Day</item> 
    <item>Diwali</item> 
    <item>Friendship Day</item> 
    <item>X-Mas</item> 
    <item>New Year</item> 
    <item>Random</item> 
</string-array> 

Jede Hilfe wäre großartig r ich.

Antwort

2

erstellen eine Klasse wie:

class Occasion { 
public String name; 
public boolean status; 
} 

danach eine Arraylist erstellen:

ArrayList<Occasion> dataList = new ArrayList<>(); 

und stellen Sie Ihre Artikel mit Auswahlstatus in dieser Arraylist wie folgt aus:

String[] occassion = getResources().getStringArray(R.array.occassion_array); 

for(int i=0; i < occassion.lenght(); i++){ 

    String name = occasion[i]; 
    Occasion obj = new Occasion(); 
    obj.name = name; 
    obj.status = getItemStatus(name); 
    datalist.add(obj); 

} 

jetzt Übergeben Sie diesen Datenlogger an Ihren Adapter und setzen Sie den Prüfstatus auf Basis des Statusparameters Gelegenheit Klasse

private boolean getItemStatus(String name) { 

String items = getSharedPreferences("pref", 0).getString("items", ""); 
if(items.contains(name){ 
    return true; 
} 
return false; 

} 

und

@Override 

public void onItemClick (AdapterView adapterView, Ansicht Ansicht, int i, lange l) {

String selectedItemName = dataList.get(i).name; 
String items = getSharedPreferences("pref", 0).getString("items", ""); 

if(!dataList.get(i).status) { 

    if(items.equals("")) { 

     items = selectedItemName; 

    } else { 

     items = items +","+ selectedItemName; 

    } 

} else { 

    items = items.replace(selectedItemName, ""); 

} 

SharedPreferences.Editor editor = getSharedPreferences("pref", 0).edit(); 
editor.putString("items", items); 
    editor.apply(); 

dataList.get(i).status = !dataList.get(i).status; 
adapter.notifyDataSetChanged(); 

} 

jetzt müssen Sie Ihren Adapter ändern Nur Klasse. In dieser Klasse unter getView() müssen Sie den Status jedes Elements überprüfen und das Kontrollkästchen entsprechend aktivieren.

Hoffe, das wird Ihnen helfen.

+0

Sir .. mache deine antwort aber wenn ich wieder zu meiner arraylist gehe ist schwarz kein checkbox ausgewählt. Bedeutet, wenn ich Geburtstag und Hochzeit ankreuzen meine Textansicht gebe das richtige Ergebnis und wieder gehe meine Listarray wird es leer sein nicht ausgewählt Geburtstag und wdding –

+0

Hey ich habe meine Antwort bearbeitet, bitte gehen Sie durch diese. –

1

Überprüfen Sie dies.

for(int i = 0 ; i<adapterOccassion.size ;i++) 
{ 
if(Utils.occassionArrayList.contains(adapterOccassion.getItem(i))) 
    { 
     // set checked 
    } 
} 
+0

Wie zeigen wir meine vorgewählte Checkbox in Arraylist –

+0

Für das Array Liste erstellen. und das Element in der Liste hinzufügen, wenn das Kontrollkästchen aktiviert ist. –

+0

Ja, ich erstelle meine Arraylist "Utils.occassionArrayList" und mein ausgewählter Artikel fügt auch Ergebnisse in der nächsten Aktivität Textansicht hinzu und zeigt sie an. Aber wenn ich meine Arraylist wieder öffne, hat sie das ausgewählte Kontrollkästchen nicht ausgewählt. –

Verwandte Themen