Skip to content

Instantly share code, notes, and snippets.

@bluemyria
Last active March 12, 2018 08:25
Show Gist options
  • Save bluemyria/3ab7dfad55258ad7eac0bf6120684745 to your computer and use it in GitHub Desktop.
Save bluemyria/3ab7dfad55258ad7eac0bf6120684745 to your computer and use it in GitHub Desktop.
Android 014 - List Listener
//////////////////////////////////////////////////////////////////////////////////////////////
// in MainActivity
//////////////////////////////////////////////////////////////////////////////////////////////
public class MainActivity extends AppCompatActivity {
private TextView tv;
private ListView lv;
private ExpandableListView elv;
private String[] gruppen = {"Gruppe 1", "Gruppe 2", "Gruppe 3"};
private String[][] kinder = {
{"Gruppe 1, Kind 1", "Gruppe 1, Kind 2"},
{"Gruppe 2, Kind 1", "Gruppe 2, Kind 2", "Gruppe 2, Kind 3"},
{"Gruppe 3, Kind 1", "Gruppe 3, Kind 2", "Gruppe 3, Kind 3", "Gruppe 3, Kind 4", "Gruppe 3, Kind 5"}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tv);
lv = findViewById(R.id.lv);
elv = findViewById(R.id.elv);
// Behandlung ListView nur 2 Listener
lv.setAdapter(new MyListAdapter(this));
lv.setOnItemClickListener(new myOICL());
lv.setOnItemLongClickListener(new myOILCL());
// behandlung ExpandableListView: 6 unterschiedliche Listener
elv.setAdapter(new MyBELA(this, gruppen, kinder));
elv.setOnChildClickListener(new myOChildCL());
elv.setOnGroupClickListener(new myOGroupCL());
elv.setOnGroupCollapseListener(new myOGCollapseL());
elv.setOnGroupExpandListener(new myOGExpandL());
elv.setOnItemClickListener(new myOnELVOICL());
elv.setOnItemLongClickListener(new myOILCL());
}
private class myOICL implements AdapterView.OnItemClickListener {
/**
* wird aufgerufen wenn ein item angeklickt wurde
* @param parent die ListView in der das Item ist
* @param view die angeklickte view
* @param position die position
* @param id die ID aus dem Adapter
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Log.v("XXX", String.format("Position: %d, ID: %d",position,id));
TextView item = (TextView) view;
tv.setText(String.format("Text: %s, Position: %d, ID: %d",item.getText().toString(),position,id));
}
}
private class myOILCL implements AdapterView.OnItemLongClickListener {
/**
*
* @param parent wie oben
* @param view wie oben
* @param position wie oben
* @param id wie oben
* @return true falls Ereignis abgearbeitet, ansonsten false
*/
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Log.v("XXX", String.format("Position: %d, ID: %d",position,id));
TextView item = (TextView) view;
tv.setText(String.format("LONG Text: %s, Position: %d, ID: %d",item.getText().toString(),position,id));
return false;
}
}
private class myOChildCL implements ExpandableListView.OnChildClickListener {
@Override
public boolean onChildClick(ExpandableListView parent, View view,
int groupPosition, int childPosition, long id) {
Log.v("XXXXX - onChildClick",String.format("g = %d, c = %d, id = %d",
groupPosition,childPosition,id));
return false;
}
}
private class myOGroupCL implements ExpandableListView.OnGroupClickListener {
@Override
public boolean onGroupClick(ExpandableListView parent, View view, int groupPosition, long id) {
Log.v("XXXXX - onGroupClick",String.format("g = %d, id = %d",
groupPosition,id));
return false;
}
}
private class myOGCollapseL implements ExpandableListView.OnGroupCollapseListener {
@Override
public void onGroupCollapse(int groupPosition) {
Log.v("XXXXX - onGroupCollapse",String.format("g = %d",
groupPosition));
}
}
private class myOGExpandL implements ExpandableListView.OnGroupExpandListener {
@Override
public void onGroupExpand(int groupPosition) {
Log.v("XXXXX - onGroupExpand",String.format("g = %d",
groupPosition));
}
}
private class myOnELVOICL implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.v("XXX", String.format("Position: %d, ID: %d",position,id));
TextView item = (TextView) view;
tv.setText(String.format("XXXXX - onItemClick: %s, Position: %d, ID: %d",item.getText().toString(),position,id));
}
}
private class myOnLONGelvICL implements View.OnLongClickListener {
@Override
public boolean onLongClick(View view) {
return false;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
// in MyListAdapter (ListAdapter) fuer die einfache ListView
//////////////////////////////////////////////////////////////////////////////////////////////
public class MyListAdapter implements ListAdapter {
private ArrayList<String> eintraege;
private Context context;
public MyListAdapter(Context context) {
this.context = context;
eintraege = new ArrayList<String>();
for (int i=1;i<=100;i++)
eintraege.add("Zeileneintrag " +i);
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int i) {
return true;
}
@Override
public void registerDataSetObserver(DataSetObserver dataSetObserver) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver dataSetObserver) {
}
@Override
public int getCount() {
return eintraege.size();
}
@Override
public Object getItem(int position) {
return eintraege.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
// Sind die IDs stabil, also unveränderbar?
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
Log.v("XXXXX", "position " + position + ", convertView = " + convertView);
TextView tv;
if(convertView == null)
tv = new TextView(context);
else
tv = (TextView) convertView;
tv.setText(eintraege.get(position));
return tv;
}
// Welche Zeilen Optik soll an der Position verwendet werden?
// wenn nur eine existiert, nehmen wir 0
@Override
public int getItemViewType(int i) {
return 0;
}
// Wie viele verschiedene zeilen-Optiken haben wir?
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean isEmpty() {
return getCount() == 0;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
// in MyBELA (BaseExpandableListAdapter) für die fuer die komplexere ExpandableListView
//////////////////////////////////////////////////////////////////////////////////////////////
class MyBELA extends BaseExpandableListAdapter{
private Context context;
private String[] gruppen;
private String[][] kinder;
@Override
public boolean areAllItemsEnabled() {
return true;
}
public MyBELA(Context context, String[] gruppen, String[][] kinder) {
this.context = context;
this.gruppen = gruppen;
this.kinder = kinder;
}
@Override
public int getGroupCount() {
return gruppen.length;
}
@Override
public int getChildrenCount(int i) {
return kinder[i].length;
}
@Override
public Object getGroup(int groupPosition) {
return gruppen[groupPosition];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return kinder[groupPosition][childPosition];
}
/**
* Die eindeutige Gruppen-ID kann irgendwie zusammengebastellt werden
* Hier haben die Gruppen die Ids
* @param groupPosition
* @return
*/
@Override
public long getGroupId(int groupPosition) {
// damit wir nicht mit 0 anfangen, addieren wir 1
return (groupPosition+1)*10000;
}
/**
* Die eindeutige Child-ID kann irgendwie zusammengebastellt werden
* 10001,10002,20001,....
*
*/
@Override
public long getChildId(int groupPosition, int childPosition) {
return (groupPosition+1)*10000 + (childPosition+1);
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {
TextView tv = null;
if (convertView == null){
tv = new TextView(context);
tv.setPadding(10, 0, 0, 5);
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 25);
} else {
tv = (TextView) convertView;
}
tv.setText(getGroup(groupPosition).toString());
return tv;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup viewGroup) {
TextView tv = null;
if (convertView == null) {
tv = new TextView(context);
tv.setPadding(25, 0, 0, 5);
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
} else {
tv = (TextView) convertView;
}
tv.setText(getChild(groupPosition,childPosition).toString());
return tv;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment