Reputation: 1819
I'm working on a custom ListView
with a custom ListAdapter
based on BasedAdapter
. My ListView
item has a ToggleButton
and an EditText
. In the activity that uses this ListView
, I have a Button
called Save
. When I click Save
, the activity must find someway to get data from ListView
to do some stuffs with this.
In the custom ListView
adapter, I use an ArrayList
to keep track change in DataItem
, with represents the model for the ListView
item (contains a boolean
variable for the ToggleButton
and a String
for the text in EditText
).
The problem is that when I click Save
, I must, somehow, get the data from the ArrayList
from the adapter, which also consists of updated data of EditText
and ToggleButton
in each list item?
How can I do that?
Upvotes: 1
Views: 4792
Reputation: 674
Yes, thats correct. Also, to get radioButton checkedId you ned to create a onCkeckedChangeListener and set the checkedId there. After that override following method
public int[] getChkId() {
return chkId;
}
to get the checked radio Button. Thanks.
Upvotes: 0
Reputation: 476
Hi here is what u need:
public class MusicTrack extends Activity {
private ArrayAdapter<CardDetails> listAdapter ;
ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
CardDetailsAdapter mListAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ArrayList<CardDetails> cardResults = GetCardDetails();
for (int i = 0; i < cardResults.size(); i++) {
System.out.println("card redsults: " + cardResults.get(i).isSelected());
}
final ListView welcomelist = (ListView) findViewById(R.id.welcomelistID);
listAdapter = new CardDetailsAdapter(this, cardResults);
welcomelist.setAdapter(listAdapter );
final Button saveBtn = (Button) findViewById(R.id.saveID);
saveBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// get the checkbox status and save related details into database
// Intent intent = new Intent(MusicTrack.this, TransactionSummaryActivity.class);
itemChecked = mListAdapter.itemChecked1;
System.out.println("item checked: " + itemChecked);
for (int i = 0; i < cardResults.size(); i++) {
System.out.println("cardResults and checked status: " + cardResults.get(i).getText());
System.out.println("cardResults and checked status111: " + cardResults.get(i).isSelected());
}
}
});
}
private ArrayList<CardDetails> GetCardDetails() {
ArrayList<CardDetails> carddetailresults = new ArrayList<CardDetails>();
CardDetails sr1 = new CardDetails();
sr1.setText("Text1");
sr1.setSelected(false);
carddetailresults.add(sr1);
sr1 = new CardDetails();
sr1.setText("Text2");
sr1.setSelected(true);
carddetailresults.add(sr1);
sr1 = new CardDetails();
sr1.setText("Text3");
sr1.setSelected(true);
carddetailresults.add(sr1);
sr1 = new CardDetails();
sr1.setText("Text4");
sr1.setSelected(true);
carddetailresults.add(sr1);
sr1 = new CardDetails();
sr1.setText("Text5");
sr1.setSelected(false);
carddetailresults.add(sr1);
return carddetailresults;
}}
class CardDetails{
String text;
Boolean selected;
public String getText() {
return text;
}
public void setText(String bankName) {
text = bankName;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}}
class CardDetailsAdapter extends ArrayAdapter<CardDetails> {
private static ArrayList<CardDetails> searchArrayList;
public static ArrayList<Integer> alSelCards = new ArrayList<Integer>();
public static ArrayList<Boolean> itemChecked1 = null;
private LayoutInflater mInflater;
protected Context getContext;
public CardDetailsAdapter( Context context, ArrayList<CardDetails> results) {
super( context, R.layout.webview, R.id.textID, results );
// Cache the LayoutInflate to avoid asking for a new one each time.
searchArrayList = results;
getContext = context;
mInflater = LayoutInflater.from(context) ;
itemChecked1 = new ArrayList<Boolean>();
for (int i = 0; i < results.size(); i++) {
itemChecked1.add(i, results.get(i).isSelected()); // initializes all items value with
}
}
public int getCount() {
if (searchArrayList != null)
return searchArrayList.size();
return 0;
}
public CardDetails getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
final ViewGroup parent) {
CardDetails planet = (CardDetails) this.getItem(position);
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.webview, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.textID);
holder.chkbox = (ToggleButton) convertView.findViewById(R.id.togID);
convertView.setTag(holder);
holder.text.setText(searchArrayList.get(position).getText());
holder.chkbox.setTag(planet);
holder.chkbox.setChecked(planet.isSelected());
} else {
holder = (ViewHolder) convertView.getTag();
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
holder.chkbox = viewHolder.getCheckBox();
holder.text = viewHolder.getText();
holder.text.setText(searchArrayList.get(position).getText());
holder.chkbox.setTag(planet);
holder.chkbox.setChecked(planet.isSelected());
}
holder.chkbox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ToggleButton cb = (ToggleButton) v;
CardDetails planet = (CardDetails) cb.getTag();
//planet.setSelected(cb.isChecked());
if (holder.chkbox.isChecked()) {
itemChecked1.set(position, true);
holder.chkbox.setChecked(true);
planet.setSelected(true);
} else if (!holder.chkbox.isChecked()) {
itemChecked1.set(position, false);
holder.chkbox.setChecked(false);
planet.setSelected(false);
}
}
});
return convertView;
}
public static class ViewHolder {
private ToggleButton chkbox;
TextView text;
public ViewHolder() {
}
public ViewHolder(TextView text, ToggleButton chkbox) {
this.chkbox = chkbox;
this.text = text;
}
public ToggleButton getCheckBox() {
return chkbox;
}
public void setCheckBox(CheckBox checkBox) {
this.chkbox = chkbox;
}
public TextView getText() {
return text;
}
public void setText(TextView text) {
this.text = text;
}
}}
import required things
Upvotes: 0
Reputation: 57336
Normally, you would be the one setting this Adapter into the ListView. All you need to do is save the instance of this adapter in a member variable in the Activity. Adapter already provides methods for accessing individual items. You can add more methods to get to your data. Something like this:
public class MyAdapter extends BaseAdapter {
List data;
......
public boolean[] getCheckStates() {
//get values of your checkboxes here
}
public String[] getTexts() {
//get text of your text boxes here
}
// implement all other methods of BaseAdapter
}
And then in your activity:
public class MyActivity extends Activity {
MyAdapter adapter;
public onCreate(Bundle instance) {
.....
adapter = new MyAdapter(...);
...
myList.setAdapter(adapter);
...
btnSave.setOnClickListener(new OnClickListener() {
public void onClick (View v) {
boolean[] checks = adapter.getCheckStates();
String[] texts = adapter.getTexts();
....
}
});
}
........
}
Upvotes: 3