2015-05-14 6 views
0

Im пытается сделать spannable ListView. Когда вы нажимаете на элемент в ListView, он должен охватывать и показывать две кнопки. До сих пор мне удалось создать CustomAdapter для этого.onItemClickListener открывает только меню диапазона первого элемента

Моя проблема заключается в том, что когда я нажимаю на элемент, всегда включается первый элемент в 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; 
    } 

ответ

0

Вы не отправлял свой custom_list_row макет, но то, что я могу догадаться из вашего кода является то, что в этом макете у вас есть ViewGroup или View (Предположим, что TextView отображает имя продукта в вашем коде) для элемента и 2 кнопки ниже, для которых VISIDITY выбрана GONE. Тогда, что вы хотите, так это то, что, когда пользователи нажимают на элемент, вы устанавливаете 2 кнопки ниже этого элемента в VISIBLE. Вот один из способов сделать это:

  1. Снимите setOnItemClickListener на ProductList от деятельности
  2. В методе GetView() ваш CustomAdapter набор onClickListener к представлению названия продукта. Что-то вроде этого:

    TextView productName = (TextView) customView.findViewById (R.id.ProductName);

    Button 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); 
    } 
    } 
    
+0

и если я хочу, чтобы добавить onclickListener в этих двух кнопок, где я должен делать это? – Ollikas

+0

На CustomAdapter getView() также. Именно здесь вы имеете ссылку на кнопки в определенной позиции. –

Смежные вопросы