Мне нужно создать события для установки флажка, но это действует только для первого экрана. Мой код:

Был бы очень рад, если бы мне кто-нибудь помог.

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;

    }

}

С кодом все в порядке? Какие изменения мне нужно внести в код, чтобы выполнить задачу, которую я ищу?

0
Diogo Odelli 13 Авг 2014 в 20:20
Вы не устанавливаете прослушиватель кликов на свой флажок, пока пользователь не нажмет вашу кнопку exe. Это намеренно?
 – 
Matthew Pape
13 Авг 2014 в 21:04
На самом деле мое намерение состоит в том, чтобы для каждой строки события щелкнуть список, просмотреть список медведей из sd, как я это сделал, действует только первая строка списка, не знаю, могу ли я быть ясным ...
 – 
Diogo Odelli
13 Авг 2014 в 21:15
Хочу учитывать не только при нажатии на кнопку ...
 – 
Diogo Odelli
13 Авг 2014 в 21:16
Извините, я не понимаю ваш вопрос. Каждое представление в вашем списке содержит один или несколько флажков?
 – 
Matthew Pape
13 Авг 2014 в 21:22
Несколько, как показано ниже, список флажков. элемент 1 - не отмечен элемент 2 - отмечен элемент 3 - не отмечен элемент 4 - не отмечен, если я оцениваю второй элемент, ничего не происходит. происходит только при нажатии на пример. применяется только щелчок по первому элементу на экране. этот список находится в списке фрагментов, извините за мой плохой английский, спасибо за терпение
 – 
Diogo Odelli
13 Авг 2014 в 21:35

1 ответ

Лучший ответ

В 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();
                }
            }
        });
    }
}
0
Matthew Pape 14 Авг 2014 в 18:01