我在片段中有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
,依此类推。
有什么想法吗?
答案 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);
}
}
});