获取ListView中的元素

时间:2017-12-24 11:28:34

标签: android listview

我在片段中有3个ListView,现在我需要获取我点击的对象以打开一个新页面并显示一些元素。

问题是在我的选项卡中填充了ListView查询Sqlite数据库,当我向列表中添加元素时,每个页面从0开始,而在我的数据库中,每个元素都有不同的ID。

如何获得正确的元素?

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

            Integer pageToShow = getArguments().getInt(ARG_SECTION_NUMBER);

            View rootView = inflater.inflate(R.layout.fragment_choose_character, container, false);
            ListView listView = (ListView) rootView.findViewById(R.id.listViewPersonaggi);

            personaggiDB = new DatabasePersonaggiHandler(getContext());
            ArrayList<Personaggio> personaggi = personaggiDB.getAllPersonaggi(pageToShow);

            // Adatto il personaggio alla grafica della lista
            this.m_adapter = new PersonaggioAdapter(getContext(), R.layout.riga_personaggio, personaggi);
            listView.setAdapter(this.m_adapter);

            // Su ogni elemento della lista aggiungo il click
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                    Intent singoloPersonaggioIntent = new Intent(getContext(), SingoloPersonaggioActivity.class);
                    singoloPersonaggioIntent.putExtra("idPersonaggio", i);
                    startActivity(singoloPersonaggioIntent);
                }
            });

            return rootView;
        }

如你所见,我使用这一行:

ArrayList<Personaggio> personaggi = personaggiDB.getAllPersonaggi(pageToShow);

了解从我的数据库中获取哪种类型的字符,以便每个页面都有不同的字符 例如,在我的第二个标签pageToShow = 2中,第一个元素的位置为0,但在我的数据库中,它有id = 12,依此类推。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

可以通过三种方式在列表项目上单击传递数据。

1。首先,如果您要在下一页上加载完整数据,则应将PrimaryKey Id传递到下一个屏幕。为此,您需要从适配器获取列表项。在适配器

  @Override
    public Personaggio getItem(int position) {
        return list.get(position);
    }

然后获取点击项目的实例。

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            if(listView.getAdapter()!=null){
                Personaggio obj=m_adapter.getItem(position);
                Intent singoloPersonaggioIntent = new Intent(getContext(), SingoloPersonaggioActivity.class);
                singoloPersonaggioIntent.putExtra("idPersonaggio", obj.getId());
                startActivity(singoloPersonaggioIntent);
            }
        }
    });

2. 在第二种情况下,您可以直接将对象传递给下一个活动。

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            if(listView.getAdapter()!=null){
                Personaggio obj=m_adapter.getItem(position);
                Intent singoloPersonaggioIntent = new Intent(getContext(), SingoloPersonaggioActivity.class);
                singoloPersonaggioIntent.putExtra("data", obj);
                startActivity(singoloPersonaggioIntent);
            }
        }
    });

在这种情况下,您的模型类应该实现Serializable

 class Personaggio implements Serializable{

  }

3. 对于CursorAdapter(以及SimpleCursorAdapter),id返回表的行ID,即_id。因此,如果您正在使用CursorAdapter,那么您只需使用第4个长pamameter,它应该被命名为_id

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            if(listView.getAdapter()!=null){

                Intent singoloPersonaggioIntent = new Intent(getContext(), SingoloPersonaggioActivity.class);
                singoloPersonaggioIntent.putExtra("idPersonaggio", l);
                startActivity(singoloPersonaggioIntent);
            }
        }
    });