android - 单击元素时获取gridview的TextView值
问题描述
当我单击列表的一个元素时,我试图从 gridView 获取 TextView 的值。适配器由 2 个 textViews 组成。这是 ListAdapter 类。
public class ListAdapter extends BaseAdapter {
private Context context;
private int layout;
private ArrayList<Customer> CustomerList;
public ListAdapter(Context CustomerList, int customer_activity, ArrayList<Customer> Customer) {
this.context = CustomerList;
this.layout = customer_activity;
this.CustomerList = Customer;
}
@Override
public int getCount() {
return CustomerList.size();
}
@Override
public Object getItem(int position) {
return CustomerList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private class ViewHolder{
TextView textViewJob, textViewName;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = new ViewHolder();
if(row == null)
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(layout,null);
holder.textViewJob = (TextView)row.findViewById(R.id.tvJobAdap);
holder.textViewName = (TextView)row.findViewById(R.id.tvNameAdap);
row.setTag(holder);
}
else {
holder = (ViewHolder)row.getTag();
}
Customer Customer = CustomerList.get(position);
holder.textViewJob.setText(Customer.getJob());
holder.textViewName.setText(Customer.getName());
return row;
}
}
当我单击列表中的一个元素(例如在第三个位置)时,我想获取与该 ID 对应的 TextViewName (Customer.getName())。我试图在 Toast.makeText 的 gridViewCustomer.setOnItemClickListener 中解释它
GridView gridViewCustomer;
ArrayList<Customer> customer;
ListeAdapter adapter = null;
public String selectedItemText;
//Referenz of the SQLiteHelper class
public static SQLiteHelper sqLiteHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.Customer_activity);
sqLiteHelper = new SQLiteHelper(CustomerListe.this, "Customer.sqlite", null, 3);
//Customer List
gridViewCustomer = (GridView) findViewById(R.id.gvCustomerList);
customer = new ArrayList<>();
adapter = new ListeAdapter(this, R.layout.customer_activity, customer);
gridViewCustomer.setAdapter(adapter);
gridViewCustomer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,final int position, long id) {
Toast.makeText(ListActivity.this, "You have clicked on the element with id =" + id, Toast.LENGTH_SHORT).show();
Toast.makeText(ListActivity.this, "Please how could I get the TextView (TextViewName) corresponding to that id ?", Toast.LENGTH_SHORT).show();
}
});
}
解决方案
一种解决方案是您可以像这样在适配器中创建一个接口
public interface OnAdapterItemClickListener{
public void click(View view,int position,String name);
}
和适配器内的一个类
public void clickItem(OnAdapterItemClickListener listener){
this.listener =listener;
}
在适配器中将其定义为变量
public OnAdapterItemClickListener listerner;
现在在你的 BindViewHolder
holder.parent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.click(view,position,name);
}
});
最后一步,您只需要在使用适配器的类中设置接口
chatUsersListAdapter.clickItem(new OnAdapterItemClickListener ChatUsersListAdapter.OnItemClick() {
@Override
public void click(View view,int position, String name) {
//perform any action
}
});
推荐阅读
- c# - 在显示 msgbox 后,如何防止 Enter 键事件冒泡到控件(例如,消息框 OK 按钮 - Enter)?
- selenium - Selenium 网格从 1 到 999999
- ads - Google 广告脚本 - 为 UAC(移动安装广告)设置 CPA 字段
- traits - 移相器特征何时运行?
- spring - 使用 Actuator 和 OpenAPI 添加自定义标签(名称和描述) - Spring boot
- javascript - 如果输入标签初始化为null,则包含e.target.files的数组为空
- python - 尝试使用kv文件时Kivy显示黑屏?
- java - java流中的多个map()方法与单个map()方法
- postgresql - 如何在没有破折号的 pg-promise 中显示 UUID
- servlets - 使用 Servlet 上的 switch 语句运行依赖于 JSP 链接的方法