将 onclick 设置为不可见的项目
Set onclick to item that isn't visible
所以我已经四处寻找大约 4 个小时了,也许我只是不知道如何用词来搜索,但我没有找到我需要的东西。
我正在使用自定义适配器根据存储在 sqlite 数据库中的项目设置我的列表视图。我的光标将 id、名称、product_id、数据、日期时间发送到我的适配器。但我的适配器设置为仅显示名称、数据和日期时间。
我需要能够单击该名称,但让它转到我的下一个 activity 并显示从 product_id 发送到适配器的信息。示例 我点击苹果,但在我的数据库中它实际上是 product_id 505。除非我将 product_id 设置为文本视图,否则当我单击我的项目时,它不会显示正确的列表并搜索 Apples。
如果不清楚,请告诉我,我会更好地解释。
** 编辑 **
所以我的数据库是这样的
_ID | PRODUCT_NAME | PRODUCT_ID | PRODUCT_DATA |日期
1 苹果 505 新鲜苹果 123456
2橙506鲜橙123456
3 奇异果 507 鲜奇异果 123456
4坚果508新鲜坚果123456
我的 ListView 显示如下:
苹果 - 新鲜苹果 - 枣
橙子 - 鲜橙 - 枣
奇异果- 新鲜奇异果 - 枣
坚果 - 新鲜坚果 - 日期
当我点击苹果时,我希望它 return PRODUCT_ID 给我,而不是 _ID,这样我就可以将那个 product_id 传递给我的下一个意图。
我的展示列表
public void displayListView()
{
DatabaseOperations db = new DatabaseOperations(this);
Cursor cursor = db.getProducts();
dataAdapter = new MainActivityAdapter(
this,
cursor,
0);
ListView listView = (ListView) findViewById(R.id.product_list);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
// listening to single list item on click
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view,
int position, long ID)
{
TextView listText = (TextView) view.findViewById(R.id.name);
String product_name = listText.getText().toString();
Intent i = new Intent(MainActivity.this, product_detail.class);
i.putExtra("productName", product_name);
MainActivity.this.startActivity(i);
}
});
db.close();
}
我的适配器
public class MainActivityAdapter extends CursorAdapter
{
private LayoutInflater cursorInflater;
private Context c;
// Default constructor
public MainActivityAdapter(Context context, Cursor cursor, int flags)
{
super(context, cursor, flags);
cursorInflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
c = context;
// Log.i("Custom-Adapter", "Starting up");
}
public void bindView(View view, Context context, Cursor list)
{
TextView PN = (TextView) view.findViewById(R.id.product_name);
TextView PI = (TextView) view.findViewById(R.id.product_data);
TextView date = (TextView) view.findViewById(R.id.date);
// SET OUR DATA FROM OUR CURSOR
String pn = list.getString( list.getColumnIndex("pn"));
String pi = list.getString( list.getColumnIndex("pi"));;
// NEED TO RECONVERT DATE THEN SHOW IT
Long millidate = list.getLong(list.getColumnIndex("dateTime"));
Date myDateNew = new Date(millidate);
String Sdate = getDate(millidate);
PN.setText(pn);
PI.setText(pi);
date.setText(Sdate);
}
public static String getDate(long milliSeconds)
{
Calendar cl = Calendar.getInstance();
cl.setTimeInMillis(milliSeconds); //here your time in miliseconds
String date = "" + cl.get(Calendar.DAY_OF_MONTH) + ":" + cl.get(Calendar.MONTH) + ":" + cl.get(Calendar.YEAR);
String time = "" + cl.get(Calendar.HOUR_OF_DAY) + ":" + cl.get(Calendar.MINUTE) + ":" + cl.get(Calendar.SECOND);
return date;
}
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
//Log.i("Custom-Adapter", "newView Started");
// R.layout.list_row is your xml layout for each row
return cursorInflater.inflate(R.layout.activity_list, parent, false);
}
一个不错的选择是创建一个数组并为所有名称存储 product_ids。
Goto Res->Strings 创建一个字符串数组。
然后从数组中获取名称的相关 product_id。
I want to get the product_id when I click on the name Apples.
我们可以通过多种方式实现它,但最常见的方式是:
选项 1:
使用 setTag
方法保存名称在 TextView
中的 id
产品:
PN.setText(pn);
PN.setTag((list.getInt(list.getColumnIndex("product_id"))).toString());
现在使用getTag
方法获取点击产品product_id
in onItemClick
:
String product_name = listText.getText().toString();
int product_id = Integer.parseInt(listText.getTag().toString());
选项 2:
不从 TextView 获取产品名称,而是使用 onItemClick
中的适配器获取点击的行光标:
Cursor cursor = (Cursor) dataAdapter.getItem(position);
String product_name = cursor.getString(cursor.getColumnIndex("pn"));
int product_id = cursor.getInt(cursor.getColumnIndex("product_id"));
....
所以我已经四处寻找大约 4 个小时了,也许我只是不知道如何用词来搜索,但我没有找到我需要的东西。
我正在使用自定义适配器根据存储在 sqlite 数据库中的项目设置我的列表视图。我的光标将 id、名称、product_id、数据、日期时间发送到我的适配器。但我的适配器设置为仅显示名称、数据和日期时间。
我需要能够单击该名称,但让它转到我的下一个 activity 并显示从 product_id 发送到适配器的信息。示例 我点击苹果,但在我的数据库中它实际上是 product_id 505。除非我将 product_id 设置为文本视图,否则当我单击我的项目时,它不会显示正确的列表并搜索 Apples。
如果不清楚,请告诉我,我会更好地解释。
** 编辑 **
所以我的数据库是这样的
_ID | PRODUCT_NAME | PRODUCT_ID | PRODUCT_DATA |日期 1 苹果 505 新鲜苹果 123456 2橙506鲜橙123456 3 奇异果 507 鲜奇异果 123456 4坚果508新鲜坚果123456
我的 ListView 显示如下: 苹果 - 新鲜苹果 - 枣 橙子 - 鲜橙 - 枣 奇异果- 新鲜奇异果 - 枣 坚果 - 新鲜坚果 - 日期
当我点击苹果时,我希望它 return PRODUCT_ID 给我,而不是 _ID,这样我就可以将那个 product_id 传递给我的下一个意图。
我的展示列表
public void displayListView()
{
DatabaseOperations db = new DatabaseOperations(this);
Cursor cursor = db.getProducts();
dataAdapter = new MainActivityAdapter(
this,
cursor,
0);
ListView listView = (ListView) findViewById(R.id.product_list);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
// listening to single list item on click
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view,
int position, long ID)
{
TextView listText = (TextView) view.findViewById(R.id.name);
String product_name = listText.getText().toString();
Intent i = new Intent(MainActivity.this, product_detail.class);
i.putExtra("productName", product_name);
MainActivity.this.startActivity(i);
}
});
db.close();
}
我的适配器
public class MainActivityAdapter extends CursorAdapter
{
private LayoutInflater cursorInflater;
private Context c;
// Default constructor
public MainActivityAdapter(Context context, Cursor cursor, int flags)
{
super(context, cursor, flags);
cursorInflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
c = context;
// Log.i("Custom-Adapter", "Starting up");
}
public void bindView(View view, Context context, Cursor list)
{
TextView PN = (TextView) view.findViewById(R.id.product_name);
TextView PI = (TextView) view.findViewById(R.id.product_data);
TextView date = (TextView) view.findViewById(R.id.date);
// SET OUR DATA FROM OUR CURSOR
String pn = list.getString( list.getColumnIndex("pn"));
String pi = list.getString( list.getColumnIndex("pi"));;
// NEED TO RECONVERT DATE THEN SHOW IT
Long millidate = list.getLong(list.getColumnIndex("dateTime"));
Date myDateNew = new Date(millidate);
String Sdate = getDate(millidate);
PN.setText(pn);
PI.setText(pi);
date.setText(Sdate);
}
public static String getDate(long milliSeconds)
{
Calendar cl = Calendar.getInstance();
cl.setTimeInMillis(milliSeconds); //here your time in miliseconds
String date = "" + cl.get(Calendar.DAY_OF_MONTH) + ":" + cl.get(Calendar.MONTH) + ":" + cl.get(Calendar.YEAR);
String time = "" + cl.get(Calendar.HOUR_OF_DAY) + ":" + cl.get(Calendar.MINUTE) + ":" + cl.get(Calendar.SECOND);
return date;
}
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
//Log.i("Custom-Adapter", "newView Started");
// R.layout.list_row is your xml layout for each row
return cursorInflater.inflate(R.layout.activity_list, parent, false);
}
一个不错的选择是创建一个数组并为所有名称存储 product_ids。
Goto Res->Strings 创建一个字符串数组。
然后从数组中获取名称的相关 product_id。
I want to get the product_id when I click on the name Apples.
我们可以通过多种方式实现它,但最常见的方式是:
选项 1:
使用 setTag
方法保存名称在 TextView
中的 id
产品:
PN.setText(pn);
PN.setTag((list.getInt(list.getColumnIndex("product_id"))).toString());
现在使用getTag
方法获取点击产品product_id
in onItemClick
:
String product_name = listText.getText().toString();
int product_id = Integer.parseInt(listText.getTag().toString());
选项 2:
不从 TextView 获取产品名称,而是使用 onItemClick
中的适配器获取点击的行光标:
Cursor cursor = (Cursor) dataAdapter.getItem(position);
String product_name = cursor.getString(cursor.getColumnIndex("pn"));
int product_id = cursor.getInt(cursor.getColumnIndex("product_id"));
....