Last active
March 12, 2018 08:25
-
-
Save bluemyria/3ab7dfad55258ad7eac0bf6120684745 to your computer and use it in GitHub Desktop.
Android 014 - List Listener
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
////////////////////////////////////////////////////////////////////////////////////////////// | |
// 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