Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中选择和创建动态事件click listfragment_Java_Android_Dynamic_Tabs_Android Listfragment - Fatal编程技术网

Java 如何在android中选择和创建动态事件click listfragment

Java 如何在android中选择和创建动态事件click listfragment,java,android,dynamic,tabs,android-listfragment,Java,Android,Dynamic,Tabs,Android Listfragment,我需要为单击复选框创建事件,但它只对第一个屏幕生效。我的代码: 如果有人扶我起来,我会很高兴的 public class ListaFragment extends ListFragment{ public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); public View onCreateV

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

如果有人扶我起来,我会很高兴的

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;

    }

}
代码一切正常吗?为了完成我要寻找的任务,我必须对代码进行哪些更改。

在onCreateView中,您正在列表中的第一个复选框上设置一个单击侦听器。此时,无法知道列表中有多少项,也无法遍历它们,因此您需要删除代码的这一部分。我可以提出两种可能的解决办法

第一种方法简单得多,但有一个主要缺点。您将无法判断他们是否单击了复选框或歌曲标题。如果这不是你的问题,这是最简单的解决方案。将侦听器附加到listview。它将告诉您单击了列表中的哪一行

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

在用户单击exe按钮之前,您不会在复选框上设置“单击侦听器”。这是故意的吗?实际上,我的意图是,每一行的事件点击ListVIEW,ListVIEW从SD的熊,我做的方式只影响列表的第一行,不知道我是否可以清楚……不仅要考虑当你点击按钮…对不起,我不明白你的问题。列表中的每个视图都包含一个复选框还是几个复选框?几个,如下所示,复选框列表。第1项-未检查项2-检查项3-未检查项4-未检查如果我为第二项评分,则不会发生任何情况。只有在我单击primero时才会发生。它仅适用于单击屏幕上的第一项。这张单子是零碎的,很抱歉我的英语不好,谢谢你的耐心
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();
                }
            }
        });
    }
}