onItemClickListener 只打开第一个项目的跨度菜单
onItemClickListener only opens first item's span menu
我正在尝试创建一个可跨越的 ListView。当您单击 ListView 中的项目时,它应该跨越并显示两个按钮。到目前为止,我已经设法为此创建了 CustomAdapter。
我的问题是,当我单击某个项目时,总是跨越 ListView 上的第一个项目。如何解决这个问题以及如何为这两个按钮设置 onClickListener。
我的列表视图Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView productList=(ListView)findViewById(android.R.id.list);
productList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Product product= (Product) parent.getItemAtPosition(position);
Button CheckButton= (Button)findViewById(R.id.CheckButton);
Button DeleteButton=(Button)findViewById(R.id.DeleteButton);
CheckButton.setVisibility(View.VISIBLE);
DeleteButton.setVisibility(View.VISIBLE);
}
});
dbhandler=new DBHandler(this,null,null,1);
// getProductsFromDb();
adapter= new CustomAdapter(this,productnames);
productList.setAdapter(adapter);
}
public void addNewProduct(View view){
EditText userInput=(EditText)findViewById(R.id.userInput);
userInput.setVisibility(View.VISIBLE);
String productname=userInput.getText().toString();
if(productname.equals(""))return;
Product product=new Product();
product.set_productname(productname);
product.set_checked(false);
productnames.add(product);
//dbhandler.addProduct(product);
adapter.notifyDataSetChanged();
userInput.setText("");
//getProductsFromDb();
自定义适配器:
CustomAdapter(Context context, ArrayList<Product> productNames) {
super(context,R.layout.custom_list_row ,productNames);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=LayoutInflater.from(getContext());
View customView= inflater.inflate(R.layout.custom_list_row,parent,false);
final Product singleProduct=getItem(position);
TextView productName=(TextView)customView.findViewById(R.id.ProductName);
Button CheckButton = (Button)customView.findViewById(R.id.CheckButton);
Button DeleteButton = (Button)customView.findViewById(R.id.DeleteButton);
productName.setText(singleProduct.get_productname());
return customView;
}
您没有 post 您的 custom_list_row
布局,但我可以从您的代码中猜测,在该布局中您有一个 ViewGroup 或 View(假设它是要显示的 TextView您的代码中的产品名称)用于项目和下面的 2 个按钮,首先将 VISIBILITY 设置为 GONE。那么你想要的是,当用户点击该项目时,你将把该项目下方的 2 个按钮设置为 VISIBLE。以下是一种方法:
- 从 Activity
中删除 productList 上的 setOnItemClickListener
在 CustomAdapter 的 getView() 方法中,将 onClickListener 设置为产品名称视图。像这样:
TextView 产品名称=(TextView)customView.findViewById(R.id.ProductName);
按钮 CheckButton = (按钮)customView.findViewById(R.id.CheckButton);
按钮 DeleteButton = (按钮)customView.findViewById(R.id.DeleteButton);
productName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CheckButton.setVisibility(View.VISIBLE);
DeleteButton.setVisibility(View.VISIBLE);
}
}
我正在尝试创建一个可跨越的 ListView。当您单击 ListView 中的项目时,它应该跨越并显示两个按钮。到目前为止,我已经设法为此创建了 CustomAdapter。
我的问题是,当我单击某个项目时,总是跨越 ListView 上的第一个项目。如何解决这个问题以及如何为这两个按钮设置 onClickListener。
我的列表视图Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView productList=(ListView)findViewById(android.R.id.list);
productList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Product product= (Product) parent.getItemAtPosition(position);
Button CheckButton= (Button)findViewById(R.id.CheckButton);
Button DeleteButton=(Button)findViewById(R.id.DeleteButton);
CheckButton.setVisibility(View.VISIBLE);
DeleteButton.setVisibility(View.VISIBLE);
}
});
dbhandler=new DBHandler(this,null,null,1);
// getProductsFromDb();
adapter= new CustomAdapter(this,productnames);
productList.setAdapter(adapter);
}
public void addNewProduct(View view){
EditText userInput=(EditText)findViewById(R.id.userInput);
userInput.setVisibility(View.VISIBLE);
String productname=userInput.getText().toString();
if(productname.equals(""))return;
Product product=new Product();
product.set_productname(productname);
product.set_checked(false);
productnames.add(product);
//dbhandler.addProduct(product);
adapter.notifyDataSetChanged();
userInput.setText("");
//getProductsFromDb();
自定义适配器:
CustomAdapter(Context context, ArrayList<Product> productNames) {
super(context,R.layout.custom_list_row ,productNames);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=LayoutInflater.from(getContext());
View customView= inflater.inflate(R.layout.custom_list_row,parent,false);
final Product singleProduct=getItem(position);
TextView productName=(TextView)customView.findViewById(R.id.ProductName);
Button CheckButton = (Button)customView.findViewById(R.id.CheckButton);
Button DeleteButton = (Button)customView.findViewById(R.id.DeleteButton);
productName.setText(singleProduct.get_productname());
return customView;
}
您没有 post 您的 custom_list_row
布局,但我可以从您的代码中猜测,在该布局中您有一个 ViewGroup 或 View(假设它是要显示的 TextView您的代码中的产品名称)用于项目和下面的 2 个按钮,首先将 VISIBILITY 设置为 GONE。那么你想要的是,当用户点击该项目时,你将把该项目下方的 2 个按钮设置为 VISIBLE。以下是一种方法:
- 从 Activity 中删除 productList 上的 setOnItemClickListener
在 CustomAdapter 的 getView() 方法中,将 onClickListener 设置为产品名称视图。像这样:
TextView 产品名称=(TextView)customView.findViewById(R.id.ProductName);
按钮 CheckButton = (按钮)customView.findViewById(R.id.CheckButton);
按钮 DeleteButton = (按钮)customView.findViewById(R.id.DeleteButton);
productName.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { CheckButton.setVisibility(View.VISIBLE); DeleteButton.setVisibility(View.VISIBLE); } }