java - 如何在 ListFragment 中制作一个可点击的对象,它也覆盖了 onListItemClick

标签 java android android-fragments android-listfragment

我有一个 ListFragmentA 正在由我的 MainActivity 实现(它也覆盖了 onListItemClick 并且是必需的)。 CustomArrayAdapter 有两个图像和 3 个 TextView 。一切正常,除非我制作其中一张图片“Clickable=onEditDelete”。在 ListFragmentA 中找不到 onEditDelete 方法,但在将方法移动到 MainActivity 时找到了。

  1. 我想了解为什么会这样?一旦图像可点击,它是否不再属于 ListFragment?

  2. 如果方法只能在 MainActiviy 中找到,那么获取单元格中单击图像索引的最佳方法是什么?

-谢谢。

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());

    }
}

最佳答案

在 xml 中声明的单击方法总是转到 Activity 。从来没有 fragment 。这就是它的设计方式。

您必须手动将事件中继到您的 fragment 。在 onClick-method Activity 中(无论您在 xml 中声明什么),获取对 fragment 的引用并在那里调用公共(public)方法。

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

关于java - 如何在 ListFragment 中制作一个可点击的对象,它也覆盖了 onListItemClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313423/

相关文章:

java - 为什么向上转换一个类不会改变重写的方法?

android - TableLayout ScrollView 垂直和水平

java - 恢复上一个 fragment onBackPressed()?

android - 无法从总数中减去 SharedPreference 编号

java - 我困惑的一些UDP socket编程问题

java - Android 加载时的多个 Web 服务调用

java - 调试 Java Web 应用程序

android - 本地化资源可以运行时下载吗?

Android fragment 隐藏显示OnHide/OnShow?

安卓。如何使用自定义 ArrayAdapter 和 ViewPagers 节省内存