I am able to display all or selective number of records using getAllRecords() and getRecord(long id). The thing is i want to display a different record for each view button on my expandable list child.each child has a view button attached to it.the group position is known.(1st group). but the child position seems impossible to track down. i have just one resource id. how am i supposed to display different records for each child then? please help as this confuses me to the core. here's the MyCustomAdapter.java code, Parent.java code and DisplayCursor.java code. i have tried a hell lot to think it out,trying to find ways to extract child id and extract that particular record from id.but all in vain. UPDATE: found out that i need to use getTag() and viewTag() to make this happen.but i find no resource on the net to properly show me how to do it in this case.please direct me.
MyCustomAdapter code. (contains expandable list functions getchildview and getgroupview)
public class MyCustomAdapter extends BaseExpandableListAdapter {
private LayoutInflater inflater;
private ArrayList<parent> mParent;
public MyCustomAdapter(){}
public MyCustomAdapter(Context context, ArrayList<parent> parent){
mParent = parent;
inflater = LayoutInflater.from(context);
}
@Override
//counts the number of group/parent items so the list knows how many times calls getGroupView() method
public int getGroupCount() {
return mParent.size();
}
@Override
//counts the number of children items so the list knows how many times calls getChildView() method
public int getChildrenCount(int i) {
return mParent.get(i).getArrayChildren().size();
}
@Override
//gets the title of each parent/group
public Object getGroup(int i) {
return mParent.get(i).getTitle();
}
@Override
//gets the name of each item
public Object getChild(int i, int i1) {
return mParent.get(i).getArrayChildren().get(i1);
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
//in this method you must set the text to see the parent/group on the list
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
if (view == null) {
view = inflater.inflate(R.layout.investment_summary_parent, viewGroup,false);
}
TextView textView = (TextView) view.findViewById(R.id.list_item_text_view);
//"i" is the position of the parent/group in the list
textView.setText(getGroup(i).toString());
//return the entire view
return view;
}
@Override
//in this method you must set the text to see the children on the list
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
if (view == null) {
view = inflater.inflate(R.layout.investment_summary_child, viewGroup,false);
}
// viewbutton.getTag();
TextView textView = (TextView) view.findViewById(R.id.list_item_text_child);
//"i" is the position of the parent/group in the list and
//"i1" is the position of the child
textView.setText(mParent.get(i).getArrayChildren().get(i1));
//return the entire view
return view;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
/* used to make the notifyDataSetChanged() method work */
super.registerDataSetObserver(observer);
}
}
Parent code(expandable parent methods)
public class parent {
private String mTitle;
private ArrayList<String> mArrayChildren;
public String getTitle() {
return mTitle;
}
public void setTitle(String mTitle) {
this.mTitle = mTitle;
}
public ArrayList<String> getArrayChildren() {
return mArrayChildren;
}
public void setArrayChildren(ArrayList<String> mArrayChildren) {
this.mArrayChildren = mArrayChildren;
}
}
DisplayCursor code: public class DisplayCursor extends ListActivity { DBAdapter db = new DBAdapter(this);
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_cursor);
filldata();
}
@SuppressWarnings("deprecation")
public void filldata(){
db.open();
Cursor cursor = db.getRecord(2);//displays 2nd record
startManagingCursor(cursor);
String[] columns = new String[] {DBAdapter.invest_type,DBAdapter.curr_per_share_price, DBAdapter.share_name,
DBAdapter.no_of_shares,DBAdapter.share_identity,DBAdapter.purchase_price,
DBAdapter.purchase_from,DBAdapter.purchase_date,DBAdapter.purchase_contact};
int[] to = new int[] { R.id.investmenttype,R.id.currpershareprice,R.id.sharename,R.id.shareno,R.id.shareid, R.id.purprice,
R.id.purfrom,R.id.purdate,R.id.purcon};
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter( this, R.layout.row, cursor, columns, to);
this.setListAdapter(mAdapter);
db.close();
}
}
PLEASE direct me as to what changes i must make to display different record for each view button.that is, if first child view button is clicked first record must display, 2nd child's view button is clicked implies second record must display. so on.let's say i have 3 children ,3 corresponding view buttons and 3 records.
来源:https://stackoverflow.com/questions/17061833/androidone-button-id-many-buttons-one-view-id-using-gettag-settag