every one! I am a new bie in android...In my app after clicking the button on fragment I switch to new Activity which shows the list then I filtered the list and now I want to get details of selected filtered list item back to calling fragment...I tried for onClick Listener in the getView method of adapter class which extends base adapter but it not switch to calling fragment..it remains there only
My Adapter classs
public class user_list_Adapter extends BaseAdapter {
private Context context;
public static ArrayList<user_list_item> user_arraylist;
private ArrayList<user_list_item> arraylist;
public static String selected_code;
public user_list_Adapter(Context context, ArrayList<user_list_item> user_array) {
this.context = context;
this.user_arraylist = user_array;
this.arraylist = new ArrayList<user_list_item>();
this.arraylist.addAll(user_array);
}
@Override
public int getCount() {
return user_arraylist.size();
}
@Override
public Object getItem(int position) {
return user_arraylist.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.user_row, null);
}
TextView txtname = (TextView) convertView.findViewById(R.id.dname);
TextView txtcode = (TextView) convertView.findViewById(R.id.dcode);
txtname.setText(user_arraylist.get(position).getCust_name());
txtcode.setText(user_arraylist.get(position).getCode());
// Listen for ListView Item Click
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Deposite df = new Deposite();
MainActivity activity = (MainActivity) context; //this line gives class cast exception
FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
Bundle b = new Bundle();
b.putString("search_name ", search_name);
b.putString("search_code ", search_code);
df.setArguments(b);
transaction.replace(R.id.content_frame, df);
transaction.addToBackStack(null);
transaction.commit();
}
});
return convertView;
}
// Filter Class
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
user_arraylist.clear();
if (charText.length() == 0) {
user_arraylist.addAll(arraylist);
}
else
{
for (user_list_item item : arraylist)
{
if (item.getCust_name().toLowerCase(Locale.getDefault()).contains(charText))
{
user_arraylist.add(item);
}
if (item.getCode().toLowerCase(Locale.getDefault()).contains(charText))
{
user_arraylist.add(item);
}
}
}
notifyDataSetChanged();
}
}
My Adpater class with inner class filter
public class user_list_Adapter extends ArrayAdapter<user_list_item> implements Filterable
{
private Filter mfilter;
private Context context;
private ArrayList<user_list_item> filter_user_list;
private ArrayList<user_list_item> alluserlist;
//public static String selected_code;
public user_list_Adapter(Context context, ArrayList<user_list_item> user_array) {
super(context,R.layout.user_row,user_array);
this.context = context;
this.filter_user_list = user_array;
this.alluserlist = new ArrayList<user_list_item>();
this.alluserlist.addAll(user_array);
}
@Override
public int getCount() {
return filter_user_list.size();
}
@Override
public user_list_item getItem(int position) {
return filter_user_list.get(position);
}
@Override
public long getItemId(int position) {
return filter_user_list.get(position).hashCode();
}
public void resetData() {
filter_user_list = alluserlist;
}
/* *********************************
* We use the holder pattern
* It makes the view faster and avoid finding the component
* **********************************/
private static class UserHolder {
public TextView txtname;
public TextView txtcode;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
UserHolder uholder=new UserHolder();
// First let's verify the convertView is not null
if (convertView == null) {
// This a new view we inflate the new layout
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.user_row, null);
// Now we can fill the layout with the right values
TextView tvname = (TextView) convertView.findViewById(R.id.dname);
TextView tvcode = (TextView) convertView.findViewById(R.id.dcode);
uholder.txtname = tvname;
uholder.txtcode = tvcode;
convertView.setTag(uholder);
}
else
uholder = (UserHolder) convertView.getTag();
user_list_item p = filter_user_list.get(position);
uholder.txtname.setText(p.getCust_name());
uholder.txtcode.setText(p.getCode());
return convertView;
}
/*
* We create our filter
*/
@Override
public Filter getFilter() {
if (mfilter == null)
mfilter = new userFilter();
return mfilter;
}
private class userFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence charText) {
FilterResults results = new FilterResults();
// We implement here the filter logic
if (charText == null || charText.length() == 0) {
// No filter implemented we return all the list
results.values = alluserlist;
results.count = alluserlist.size();
}
else {
// We perform filtering operation
List<user_list_item> uList = new ArrayList<user_list_item>();
for (user_list_item p : filter_user_list) {
if (p.getCust_name().toLowerCase(Locale.getDefault()).contains(charText)) {
uList.add(p);
}
if (p.getCode().toLowerCase(Locale.getDefault()).contains(charText)) {
uList.add(p);
}
}
results.values = uList;
results.count = uList.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
// Now we have to inform the adapter about the new list filtered
if (results.count == 0)
notifyDataSetInvalidated();
else {
filter_user_list = (ArrayList<user_list_item>) results.values;
notifyDataSetChanged();
}
}
}
}
In My search_window Activity class ie.List class which calls adapter class set onItemclick listener as
// Binds the Adapter to the ListView
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long l) {
// We know that each row in the adapter is a Map
user_list_item row = adapter.getItem(position);
//Toast.makeText(getApplicationContext(),"You Clicked On.."+row.getCust_name(),Toast.LENGTH_LONG).show();
MainActivity.deposite_search_flag = true; //global static variable
MainActivity.search_name = row.getCust_name(); //global
MainActivity.search_code =row.getCode(); //global
for (int i=0;i<RecordList.size();i++){ //user_list_item only contains name n code
if (row.getCode()==Code_Array[i]){
MainActivity.search_available = avail_bal_Array[i];
}
}
finish(); //switch to caller fragment and executes OnResume method of fragment
}
});
by setting global variables on MainActivity class I switched to caller fragment by directly finishing this activity(finish();)
//In caller fragment class
@Override
public void onResume() {
super.onResume();
if (MainActivity.deposite_search_flag){
txtname.setText(MainActivity.search_name);
txtcode.setText(MainActivity.search_code);
txt_available_bal.setText(MainActivity.search_available);
}
}