onItemClickListener只打开第一个项目的span菜单

时间:2015-05-14 07:04:19

标签: android listview onitemclicklistener

我试图做一个可兼容的ListView。当您单击ListView中的项目时,它应该跨越并显示两个按钮。到目前为止,我已设法为此创建CustomAdapter。

我的问题是,当我点击一个项目时,总是会跨越ListView上的第一个项目。如何解决这个问题以及如何将onClickListener设置为这两个按钮。

我的ListView活动:

 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:

 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;
    }

1 个答案:

答案 0 :(得分:0)

您没有发布custom_list_row布局,但我可以从您的代码中猜到,在该布局中您有一个ViewGroup或View(让我们假设它是TextView来显示产品项目中的名称和下面的2个按钮,其中VISIBILITY首先设置为GONE。那么你想要的是当用户点击该项目时,你将该项目下面的2个按钮设置为VISIBLE。以下是一种方法:

  1. 从Activity
  2. 中删除productList上的setOnItemClickListener
  3. 在CustomAdapter的getView()方法中,将onClickListener设置为产品名称视图。像这样:

    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.setOnClickListener(new OnClickListener() {
    
    @Override
    public void onClick(View v) {
        CheckButton.setVisibility(View.VISIBLE);
        DeleteButton.setVisibility(View.VISIBLE);
    }
    }