У меня есть одна таблица в базе данных SQLite, которая имеет два поля: одно «b», а другое «n», «b» представляет номер книги, а «n» представляет имена книг. Теперь я успешно извлекаю все поля «n» в моем представлении списка. хочу, чтобы когда какой-либо пользователь нажимал на определенный элемент списка, отображался номер книги b, который в моей базе данных, например, у меня есть книга n = Genesis, когда кто-либо нажимал на Genesis, он показывает номер книги, например b = 1; здесь мой код структура базы данных
*/
public class Bookname extends Fragment {
private ListView listView;
private ArrayList<String> stringArrayList;
private ArrayAdapter<String> adapter;
private DatabaseHelper mDBHelper;
private SQLiteDatabase mDb;
boolean book;
public Bookname() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_bookname, container, false);
setData();
listView = view.findViewById(R.id.list);
adapter = new ListViewAdapter((MainActivity) getContext(), R.layout.item_listview, stringArrayList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
return view;
}
private void setData() {
stringArrayList = new ArrayList<>();
mDBHelper = new DatabaseHelper(getContext());
mDb = mDBHelper.getReadableDatabase();
Cursor cursor = mDb.rawQuery("SELECT b, n FROM key_english;", new String[]{});
if (cursor.getCount() == 0) {
Toast.makeText(getContext(), "NO DATA FOUND", Toast.LENGTH_SHORT).show();
} else {
while (cursor.moveToNext()) {
stringArrayList.add(cursor.getString(1));
}
}
}
}
Myadopter class
package bible.swordof.God;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;
import java.util.List;
public class ListViewAdapter extends ArrayAdapter<String> {
private MainActivity activity;
private List<String> friendList;
public ListViewAdapter(MainActivity context, int resource, List<String> objects) {
super(context, resource, objects);
this.activity = context;
this.friendList = objects;
}
@Override
public int getCount() {
return friendList.size();
}
@Override
public String getItem(int position) {
return friendList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
// If holder not exist then locate all view from UI file.
if (convertView == null) {
// inflate UI from XML file
convertView = inflater.inflate(R.layout.item_listview, parent, false);
// get all UI view
holder = new ViewHolder(convertView);
// set tag for holder
convertView.setTag(holder);
} else {
// if holder created, get tag from view
holder = (ViewHolder) convertView.getTag();
}
holder.friendName.setText(getItem(position));
//get first letter of each String item
String firstLetter = String.valueOf(getItem(position).charAt(0));
ColorGenerator generator = ColorGenerator.MATERIAL; // or use DEFAULT
// generate random color
int color = generator.getColor(getItem(position));
TextDrawable drawable = TextDrawable.builder()
.buildRound(firstLetter, color); // radius in px
holder.imageView.setImageDrawable(drawable);
return convertView;
}
private class ViewHolder {
private ImageView imageView;
private TextView friendName;
public ViewHolder(View v) {
imageView = (ImageView) v.findViewById(R.id.image_view);
friendName = (TextView) v.findViewById(R.id.text);
}
}
}
[My database structure][1]
[1]: https://i.stack.imgur.com/7aXut.png
используйте SimpleCursorAdapter и внутри onItemClick позвоните parent.getItemAtPosition(position)
pskink я не хочу получать позицию элемента, я хочу b=число, которое в моей базе данных
pskink, я редактирую свой вопрос, пожалуйста, редактируйте свой ответ, сэр.




Создать модель Нравиться:
public class BookData {
private String bookNo;
private String bookName;
BookData(String bookNo, String bookName){
this.bookNo = bookNo;
this.bookName = bookName;
}
public String getBookNo() {
return bookNo;
}
public void setBookNo(String bookNo) {
this.bookNo = bookNo;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
} }
Создайте объект ArrayList, например:
ArrayList<BookData> stringArrayList = new ArrayList<>();
Храните ваши данные в модели
stringArrayList.add(new BookData(cursor.getString(0),cursor.getString(1)));
И получить данные, используя:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String bookNo = stringArrayList.get(position).getBookNo();
Log.e("BookNo : ", bookNo);
}
});
сэр, вы использовали пользовательский адаптер, я использовал Arrayadopter, пожалуйста, просмотрите мой код, скажите мне
Но вы храните только bookName в своем списке!
Тогда как вы получите номер книги от вашего адаптера?
Девеш Кумар Сингх, пожалуйста, скажи