Thursday 26 January 2017

ListView with Multiple CheckBox Selection Example in Android

Here is a tutorial for how to create multi checkbox selected ListView in Android by using custom adapter.

                                                                                                       
                 

In this tutorial we will learn some more things as below.

1. How to create multiple checkbox selection ListView.
2. How to create/use custom adapter for multi checkbox ListView.
3. How to read selected items from listview  in android.
4. How to get/use selected data from a custom multiple selection ListView & show it in Toast msg.


Create a new project in Android Studio & add the following files.


SplashActivity.java

public class SplashActivity extends AppCompatActivity 
{
 @Override
 protected void onCreate(Bundle savedInstanceState)
 { 
 super.onCreate(savedInstanceState);
 setContentView(R.layout.splash);
 if (getIntent().getBooleanExtra("EXIT", false)) 
 finish();
 return; 
 }

 new Handler().postDelayed(new Runnable() { @Override 

public void run() {
Intent send = new Intent(getApplicationContext(), MainActivity.class); 
 startActivity(send); } }, 4000); } }







MainActivity.java



public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {


ListView rkt_ListView;
Button btn_show_me;

private ArrayList<String> kaminey_dost_array_list = new ArrayList<String>();

private void kaminey_dost() {
kaminey_dost_array_list.add("Robi");
kaminey_dost_array_list.add("Anubhan");
kaminey_dost_array_list.add("Shikari");
kaminey_dost_array_list.add("Chittu");
kaminey_dost_array_list.add("Chuha");
kaminey_dost_array_list.add("Baba");
kaminey_dost_array_list.add("Gareeb");
kaminey_dost_array_list.add("Vinay");
kaminey_dost_array_list.add("Vakeel");
kaminey_dost_array_list.add("Gajju");
kaminey_dost_array_list.add("Ghoda");
kaminey_dost_array_list.add("Chhota Ghoda");
kaminey_dost_array_list.add("Peelu");
kaminey_dost_array_list.add("Anil");

}

RktArrayAdapter rktArrayAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);
kaminey_dost();
rkt_ListView = (ListView) findViewById(R.id.rkt_listview);

rktArrayAdapter = new RktArrayAdapter(
this,
R.layout.list_row,
android.R.id.text1,
kaminey_dost_array_list
);

rkt_ListView.setAdapter(rktArrayAdapter);
rkt_ListView.setOnItemClickListener(this);

btn_show_me = (Button) findViewById(R.id.btn_show_me);
btn_show_me.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
String result = "";

List<String> resultList = rktArrayAdapter.getCheckedItems();
for (int i = 0; i < resultList.size(); i++) {
result += String.valueOf(resultList.get(i)) + "\n";
}

rktArrayAdapter.getCheckedItemPositions().toString();

if (result.matches("")) {
Toast.makeText(
getApplicationContext(),
"Please select some thing from list to show",
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(
getApplicationContext(),
result,
Toast.LENGTH_LONG).show();
}


}
});


}

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

public class RktArrayAdapter extends ArrayAdapter<String> {

private HashMap<Integer, Boolean> myChecked = new HashMap<Integer, Boolean>();

public RktArrayAdapter(Context context, int resource,
int textViewResourceId, List<String> objects) {
super(context, resource, textViewResourceId, objects);

for (int i = 0; i < objects.size(); i++) {
myChecked.put(i, false);
}
}

public void rkt_toggleChecked(int position) {
if (myChecked.get(position)) {
myChecked.put(position, false);
} else {
myChecked.put(position, true);
}

notifyDataSetChanged();
}

public List<Integer> getCheckedItemPositions() {
List<Integer> checkedItemPositions = new ArrayList<Integer>();

for (int i = 0; i < myChecked.size(); i++) {
if (myChecked.get(i)) {
(checkedItemPositions).add(i);
}
}

return checkedItemPositions;
}

public List<String> getCheckedItems() {
List<String> checkedItems = new ArrayList<String>();

for (int i = 0; i < myChecked.size(); i++) {
if (myChecked.get(i)) {
(checkedItems).add(kaminey_dost_array_list.get(i));
}
}

return checkedItems;
}

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

if (row == null) {
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.list_row, parent, false);
}

CheckedTextView checked_TextView = (CheckedTextView) row.findViewById(R.id.checked_textview);
checked_TextView.setText(kaminey_dost_array_list.get(position));

Boolean checked = myChecked.get(position);
if (checked != null) {
checked_TextView.setChecked(checked);
}

return row;
}

}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(MainActivity.this,
SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}

}