如何在android中选择并创建动态事件单击listfragment

时间:2014-08-13 16:20:33

标签: java android dynamic tabs android-listfragment

我需要创建用于单击复选框的事件,但它仅对第一个屏幕生效。我的代码:

如果有人帮助我,我会很高兴。

public class ListaFragment extends ListFragment{


    public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {



        //ListView lv = getListView(); // here it is available

        final View rootView = inflater.inflate(R.layout.fragment_lista, container, false);
        ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();
        SongsManager plm = new SongsManager();



        // get all songs from sdcard
        Button exe = (Button) rootView.findViewById(R.id.Execultar);
        exe.setOnClickListener(new OnClickListener() {
            public ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
            @Override
            public void onClick(View v) {
                SongsManager novo = new SongsManager();
                this.list = novo.getPlayList();         



                CheckBox android = (CheckBox) rootView.findViewById(R.id.checkBox1);

                android.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        if (v.isClickable()){
                        Toast.makeText(getActivity(), "Cliquei", Toast.LENGTH_LONG).show();
                        }
                    }

                });

                //ArrayList<HashMap<String, String>> lista = new ArrayList<HashMap<String, String>>();
                for (int i = 0; i < list.size(); i++) {
                //CheckBox android = (CheckBox) rootView.findViewById(R.id.checkBox1);


                //CheckBox ck = (CheckBox) v;

                Toast.makeText(getActivity(), "Cliquei "+i+'-'+android.isChecked()+'-'+list.size(), Toast.LENGTH_LONG).show();

                }
            }
        });


        this.songsList = plm.getPlayList();

        // looping through playlist
        for (int i = 0; i < songsList.size(); i++) {
            // creating new HashMap
            HashMap<String, String> song = songsList.get(i);

            // adding HashList to ArrayList
            songsListData.add(song);
        }



        ListAdapter adapter = new SimpleAdapter(this.getActivity(), songsListData,
                R.layout.fragment_item, new String[] { "songTitle" }, new int[] {
                        R.id.songTitle });

         setListAdapter(adapter);   

         return rootView;

    }

}

代码一切正常吗?我必须在代码中进行哪些更改才能实现我正在寻找的任务。

1 个答案:

答案 0 :(得分:0)

onCreateView中,您要在列表中的第一个复选框上设置点击侦听器。此时,无法知道列表中有多少项或迭代它们,因此您将要删除代码中的那部分内容。我可以提出两种可能的解决方案。

第一个更简单,但有一个主要缺点。您将无法判断他们是否单击了复选框或歌曲标题。如果这对您来说不是问题,这是最简单的解决方案。将OnItemClickListener附加到列表视图。它会告诉您单击列表中的哪一行。

// get our list
ListView listView = rootView.findViewById(R.id.list);

// set the click listener on the whole list
listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if (view.isClickable()){
            Toast.makeText(getActivity(), "Cliquei row # " + position, Toast.LENGTH_LONG).show();
        }
    }
});

如果您需要知道他们专门点击了复选框,那么您将需要做一些额外的工作。您不想使用SimpleAdapter,而是想要创建扩展SimpleAdapter的自己的适配器类。在新的适配器类中,您将覆盖getView(int position, View convertView, ViewGroup parent)。此方法将用于在列表中创建每个视图。创建列表视图后,您将OnCheckedChangeListener附加到该特定视图的复选框。像下面这样......

public class MyListAdapter extends SimpleListAdapter() {

    @Override
    public view getView(int position, View convertView, ViewGroup parent) {
        // let the superclass inflate our view for us
        View view = super.getView(position, convertView, parent);

        // attach a listener to our check box
        CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox1);
        checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Toast.makeText(getActivity(), "row # " + position + " is checked", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getActivity(), "row # " + position + " is unchecked", Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}