2013-02-11 75 views
1

我有下面的XML佈局:停止按鈕偷的ListView重點

enter image description here

此刻,我只能點擊「添加」按鈕的EditText以下,即使我已經實現並推翻了「 OnListViewClick'擴展ListActivity超類的方法。

我相信這是使用帶有ListView的按鈕時的焦點問題。

希望有人可以告訴我如何設置XML佈局,以便我可以單擊按鈕和ListView。

OnItemListClick方法代碼:

package com.example.flybase2; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.ListActivity; 
import android.app.AlertDialog.Builder; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.text.Editable; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.TextView; 

public class ShoppingList extends ListActivity implements OnClickListener { 

Button AddItem; 
ListView showItems; 
SimpleCursorAdapter cursorAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.shoppinglistlayout); 

    AddItem = (Button) findViewById(R.id.btnAddItem); 

    showItems = (ListView)findViewById(android.R.id.list); 

    AddItem.setOnClickListener(this); 

    setList(); 

} 

@Override 
public void onClick(View clickedAdd) { 


    AlertDialog.Builder builder = new AlertDialog.Builder(ShoppingList.this); 

     builder.setTitle("Enter Item Details:"); 

          LinearLayout layout = new LinearLayout(this); 
          layout.setOrientation(LinearLayout.VERTICAL); 

          final EditText titleBox = new EditText(this); 

          titleBox.setHint("Item Name:"); 
          layout.addView(titleBox); 

          final EditText quantityBox = new EditText(this); 

          quantityBox.setHint("Item Quantity"); 
          layout.addView(quantityBox); 

          final EditText priceBox = new EditText(this); 

          priceBox.setHint("Item Price."); 
          layout.addView(priceBox); 

          builder.setView(layout); 


          builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton) { 
          try 
          { 

           Editable valueItem = titleBox.getText(); 
           Editable valueAmount = quantityBox.getText(); 
          Editable valuePrice = priceBox.getText(); 

           String itemDescription = valueItem.toString(); 
           String s = valueAmount.toString(); 
           int itemAmount = Integer.parseInt(s); 
           String a = valuePrice.toString(); 
           int itemPrice = Integer.parseInt(a); 

          DBHandlerShop addItem = new DBHandlerShop(ShoppingList.this, null, null); 
          addItem.open(); 
          addItem.insertItems(itemDescription, itemAmount, itemPrice); 
          addItem.close(); 

          } 
          catch(Exception e) 
          { 
          Dialog e1 = new Dialog(ShoppingList.this); 
          e1.setTitle("Item unsuccesfully added"); 
          TextView txt = new TextView(ShoppingList.this); 
          txt.setText("Success"); 
          e1.setContentView(txt); 
          e1.show(); 

          } 
          finally 
          { 
           Dialog e = new Dialog(ShoppingList.this); 
          e.setTitle("Item succesfully added."); 
          TextView txt = new TextView(ShoppingList.this); 
          txt.setText("Success"); 
          e.setContentView(txt); 
          e.show(); 

         setList(); 
          } 

           } 

          }); 

          builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int whichButton) { 

           } 
          }); 

          builder.show(); 

} 

@Override 
protected void onListItemClick(ListView l, View v, int position, long idd) { 
    super.onListItemClick(l, v, position, idd); 

final CharSequence[] items = {"Edit Appointment Details", "Delete Appointment"}; 

    Builder alertDialogBuilder = new AlertDialog.Builder(ShoppingList.this); 

    alertDialogBuilder.setTitle("Appointment Options:"); 

    alertDialogBuilder.setItems(items, new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int item) { 

      if (items[item].equals("Edit Appointment Details")) { 

      } 

      else if (items[item].equals("Delete Appointment")) { 

      } 

      } 

     }); 

    alertDialogBuilder.show(); 

} 


private void setList() { 

    DBHandlerShop DBShop = new DBHandlerShop(this, null, null); 

    DBHandlerShop searchItems = new DBHandlerShop(this, null, null); 

    searchItems.open(); 

    Cursor cursor = searchItems.getItems(); 

    startManagingCursor(cursor); 

    String [] from = new String [] {DBShop.KEY_ITEMSHOP, DBShop.KEY_ITEMNUM, DBShop.KEY_ITEMPRICE}; 
    int [] to = new int [] {R.id.txtSetItem, R.id.txtSetAmount, R.id.txtSetPrice}; 

    cursorAdapter = new SimpleCursorAdapter(this, R.layout.setshoppinglist, cursor, from, to); 
    showItems.setAdapter(cursorAdapter); 

} 

}

這是我的XML代碼:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="84dp" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/imgLink" 
      android:layout_width="78dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:src="@drawable/viewcon" /> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="match_parent" 
      android:layout_height="75dp" 
      android:gravity="center" 
      android:text="Shopping List" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textSize="35sp" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/txtItemDes" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Item To Add To The List:" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    <EditText 
     android:id="@+id/inputAppointName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:hint="Enter A Name" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/btnAddItem" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Add" /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 
+0

按鈕不應該阻止觸摸事件到達ListView。請發佈您的'onListItemClick()'方法的代碼。 (對於ListView的高度,'wrap_content'效率極低,請考慮使用'match_parent'。) – Sam 2013-02-11 18:27:12

+0

@Sam我添加了onListItemClick代碼。 – user1352057 2013-02-11 18:29:48

+0

+1爲快速響應,-1爲糟糕的縮進和太多空白...... – Sam 2013-02-11 18:30:17

回答

1

在聊天你帳行的XML在你的ListView。行佈局中的一個LinearLayouts是可點擊的(android:clickable="true"),這將消耗觸摸事件,防止它觸及onListItemClick()。只需刪除這一行。


加成
我建議稍微不同的方法。很顯然,你想要一個自定義的行佈局是可選的(通過點擊行的任何地方)。我發佈了詳細的答案:CheckedTextView checkmark in ListView row not showing up,一會兒回來,這裏有一個vague tutorial(您需要點擊鏈接到「Begemot」庫。)

+0

這是一個很棒的帖子,非常感謝。在您的幫助之後,我設法通過確保我的XML佈局中的複選框被設置爲可聚焦來排序我的問題:false。這現在允許我以任何順序單擊添加按鈕....列表視圖中的行(加載我的對話框)以及行內的複選框。再次非常感謝。 – user1352057 2013-02-11 19:50:14

+0

很高興我能幫忙,祝你好運! – Sam 2013-02-11 19:59:28