1

I have a ListFragmentA being implemented by my MainActivity(which also Overrides onListItemClick and is needed). The CustomArrayAdapter has two images and 3 textViews. Everything works fine except when I make one of my images "Clickable=onEditDelete". The method onEditDelete can not be found in ListFragmentA but IS found when I move the method to MainActivity.

  1. I would like to understand why this happens ? Once the image is made clickable does it not belong to the ListFragment anymore ?

  2. What is the best way to get index of the clicked image in the cell if the method can only be found in MainActiviy ?

-Thanks You.

public class MainActivity extends BaseActivity  {

    public void goEditDelete(View ed) {

                Log.d("myLog", "edit ******************* Item prod clicked:  ");
    }

}




public class CustomListViewAdapter extends ArrayAdapter<RowItem> {

    Context context;

    public CustomListViewAdapter(Context context, int resourceId, List<RowItem> items) {
        super(context, resourceId, items);
        this.context = context;
    }

    /*private view holder class*/
    private class ViewHolder {
        ImageView imageView;
        TextView txtTitle;
        TextView txtSubTitle;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        RowItem rowItem = getItem(position);

        LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.row, null);
            holder = new ViewHolder();

            holder.txtTitle = (TextView) convertView.findViewById(R.id.row_title);
            holder.txtSubTitle = (TextView) convertView.findViewById(R.id.row_subTitle);
            holder.imageView = (ImageView) convertView.findViewById(R.id.row_icon);  // make clickable ****************
            convertView.setTag(holder);
        } else
            holder = (ViewHolder) convertView.getTag();

        holder.txtSubTitle.setText(rowItem.getsubTitle());
        holder.txtTitle.setText(rowItem.getTitle());
        holder.imageView.setImageResource(rowItem.getImageId());

        return convertView;
    }
}




public class MainView extends SherlockListFragment  {

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);


        // chekc data before hand
        Log.e("myLog", "SAVED Data1 ListSize = " + myProdArrayHash.size());


        for (int i = 0; i < myProdArrayHash.size(); i++) {

            Log.e("myLog", "SAVED DataLoooop = "+ myProdArrayHash.get(i).toString());
        }
        //
        // Keys used in Hashmap
        String[] from = {"editIcon", "prod", "dist", "repEmail","repPhone"};

        // Ids of views in listview_layout
        int[] to = {R.id.row_icon, R.id.row_title, R.id.row_subTitle, R.id.tvRepEmail, R.id.tvRepCell};

        // Instantiating an adapter to store each items

        adapter = new SimpleAdapter(getActivity(), myProdArrayHash, R.layout.row, from, to);

        // Getting a reference to listview of main.xml layout file

        setListAdapter(adapter);




        // double heck
         Log.d("myDataCheck_storedItems", " sizeOfCurrentData() MainViewFrag onStart() END= " + sizeOfCurrentData());

    }
}
AhabLives
  • 1,308
  • 6
  • 22
  • 34

1 Answers1

1

on click methods declared in xml always go to the activity. Never the fragment. Thats how its designed.

You would have to relay the event to your fragment manually. In the activities onClick-method (whatever you declared in xml), get a refenerence to your fragment and call a public method there.

see: How to handle button clicks using the XML onClick within Fragments

Community
  • 1
  • 1
pumpkee
  • 3,357
  • 3
  • 27
  • 34