Android 如何将变量从onClicListener传递到dbHandler
我有一张名单,上面有我的听众。清单上有日期和地点。 我希望将位置(单击时)传递给数据库处理程序,然后在新活动中获取相同位置的所有数据 我不太擅长安卓操作系统,所以我在问有没有可能做到这一点?以及如何将这个带有地名的变量传递到dbHandler中 这是我的听众Android 如何将变量从onClicListener传递到dbHandler,android,database,sqlite,Android,Database,Sqlite,我有一张名单,上面有我的听众。清单上有日期和地点。 我希望将位置(单击时)传递给数据库处理程序,然后在新活动中获取相同位置的所有数据 我不太擅长安卓操作系统,所以我在问有没有可能做到这一点?以及如何将这个带有地名的变量传递到dbHandler中 这是我的听众 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_listview);
mainListView = (ListView) findViewById(R.id.ListViewItem);
dbHandler = new LogsDBHandler(this);
ArrayList<Logs> logsList = dbHandler.getAllLogsGroupedByPlace();
listAdapter = new LogsByPlaceAdapter(logsList);
mainListView.setAdapter(listAdapter);
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(DisplayLogsByPlace.this, LogsList.class);
startActivity(intent);
}
});
}
private class LogsByPlaceAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<Logs> logsList;
public LogsByPlaceAdapter(List<Logs> logsList) {
inflater = LayoutInflater.from(DisplayLogsByPlace.this);
this.logsList = logsList;
}
@Override
public int getCount() {
return logsList.size();
}
@Override
public Object getItem(int position) {
return logsList.get(position);
}
@Override
public long getItemId(int position) {
return logsList.get(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.activity_display_logs_by_place, parent, false);
}
Logs log = logsList.get(position);
((TextView) convertView.findViewById(R.id.textShowDate)).setText(log.getCreatedAt().toString());
((TextView) convertView.findViewById(R.id.textShowPlace)).setText(log.getPlace());
return convertView;
}
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_listview);
mainListView=(ListView)findViewById(R.id.ListViewItem);
dbHandler=新的LogsDBHandler(此);
ArrayList logsList=dbHandler.getAllLogsGroupedByPlace();
listAdapter=新的LogsByReplaceAdapter(logsList);
mainListView.setAdapter(listAdapter);
mainListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
意向意向=新意向(DisplayLogsByPlace.this、LogsList.class);
星触觉(意向);
}
});
}
私有类LogsByReplaceAdapter扩展BaseAdapter{
私人充气机;
私有列表日志列表;
公共日志ByReplaceAdapter(列表日志列表){
充气器=从(DisplayLogsByPlace.this)开始的布局充气器;
this.logsList=logsList;
}
@凌驾
public int getCount(){
返回logsList.size();
}
@凌驾
公共对象getItem(int位置){
返回日志列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回logsList.get(position.getId();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=充气机。充气(R.layout.activity\u按地点显示日志,父项,false);
}
Logs log=logsList.get(位置);
((TextView)convertView.findViewById(R.id.textShowDate)).setText(log.getCreatedAt().toString());
((TextView)convertView.findviewbyd(R.id.textShowPlace)).setText(log.getPlace());
返回视图;
}
}
这是我的dbHandler,我在其中调用这个变量
public ArrayList<Logs> getAllLogsWithSamePlace(String place) {
ArrayList<Logs> logPlaceList = new ArrayList<Logs>();
String selectQuery = "SELECT * FROM " + TABLE_LOGS + " WHERE " + KEY_PLACE + "=" + place;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
...
}
return logPlaceList;
}
public ArrayList getAllLogsWithSamePlace(字符串位置){
ArrayList logPlaceList=新建ArrayList();
String selectQuery=“SELECT*FROM”+表\日志+”其中“+键\位置+”=“+位置;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
...
}
返回日志放置列表;
}
mainListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//如果你的方法是静态的
ArrayList数组=dbHandler.getAllLogsWithSamePlace(位置);
//如果不是,则应该初始化dbhandler
意向意向=新意向(DisplayLogsByPlace.this、LogsList.class);
putArrayListExtra(“sameplaceray”,数组);
星触觉(意向);
}
});
公共阵列列表getAllLogsWithSamePlace(字符串位置){
ArrayList logPlaceList=新建ArrayList();
String selectQuery=“SELECT*FROM”+表\日志+”其中“+键\位置+”=“+位置;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
...
}
返回日志放置列表;
}
}
然后在调用dbHandler函数获取数据后onItemClickListener通过intent传递位置值,在SecondActivity中首先从intent获取值,然后调用dbHandler方法获取getAllLogsWithSamePlace数据适配器的外观是什么??AdapterView是什么样子的??它有任何对象而不是泛型吗?我刚刚用适配器更新了活动。这很好,但不是我需要的。这个矿址是DB列。在列表视图中,我按位置将其分组。因此,当在活动中单击此位置时,我需要以某种方式将其传递到dbHandler中的SqlQuery(
String selectQuery=“SELECT*FROM”+TABLE\u LOGS+“WHERE”+KEY\u place+“=”+place;
),这并不是我所需要的。这个矿址是DB列。在列表视图中,我按位置将其分组。因此,当在活动中单击此位置时,我需要以某种方式将其传递给dbHandler中的SqlQueryString selectQuery=“SELECT*FROM”+TABLE\u LOGS+“WHERE”+KEY\u place+“=”+place我不明白你说什么,当你调用getAllLogs。。。方法将位置值自动传递给dbhandler。你能解释一下你需要什么吗谢谢。不知道会自动将值传递给dbHandler。我是这样创建的mainListView.setOnItemClickListener(新建AdapterView.OnItemClickListener(){@Override public void onItemClick(AdapterView父级,视图视图,int位置,长id){ArrayList placeValue=dbHandler.getAllLogsWithSamePlace(位置);Intent Intent=new Intent(displayslogsbyplace.this,LogsList.class);intent.putExtra(“keyPlace”,placeValue);startActivity(intent);}});
不知道为什么,但错误是(place)?因为您必须首先定义特定的位置,比如“Iran”,然后将其传递给methodHm。。但是,如果您知道我的意思的话,我需要在单击istite时获得该位置?
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// if your method is static
ArrayList<String> array = dbHandler.getAllLogsWithSamePlace(place);
// if not you shoud initialize the dbhandler
Intent intent = new Intent(DisplayLogsByPlace.this, LogsList.class);
intent.putArrayListExtra("sameplaceArray", array);
startActivity(intent);
}
});
public ArrayList<Logs> getAllLogsWithSamePlace(String place) {
ArrayList<Logs> logPlaceList = new ArrayList<Logs>();
String selectQuery = "SELECT * FROM " + TABLE_LOGS + " WHERE " + KEY_PLACE + "=" + place;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
...
}
return logPlaceList;
}
}
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(DisplayLogsByPlace.this, LogsList.class);
intent.putExtra("keyword","PlaceValue");
startActivity(intent);
}
});
String place=getIntent().getExtra().getString("keyword");