2014-01-16 31 views
0

我有一個由textView,imageView和button組成的gridView。每當用戶按下按鈕時,不可見的linearLayout應該與editText和另一個Button一起出現在舊佈局的頂部。我試過這樣做,但它總是說我不能修改點擊時膨脹的元素。有什麼建議麼?繼承人我的代碼示例:custom_product_list_square.xml在運行時點擊更改充氣的視圖

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/item_border" 
    android:descendantFocusability="blocksDescendants" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" 
    android:paddingTop="5dp" > 

    <LinearLayout 
     android:id="@+id/icon_thumbnail_sq_list" 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" > 

     <ImageView 
      android:id="@+id/product_image_icon_sq_list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:contentDescription="@string/product_image" 
      android:src="@drawable/cake1" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/product_name_sq_list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/icon_thumbnail_sq_list" 
     android:layout_centerHorizontal="true" 
     android:gravity="center" 
     android:lines="3" 
     android:text="text1" 
     android:textColor="#040404" 
     android:textSize="12sp" 
     android:textStyle="bold" 
     android:typeface="sans" /> 

    <TextView 
     android:id="@+id/product_price_sq_list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/product_name_sq_list" 
     android:layout_below="@+id/product_name_sq_list" 
     android:gravity="right" 
     android:text="text2" 
     android:textColor="@color/black2" 
     android:visibility="visible" /> 

    <Button 
     android:id="@+id/order_btn" 
     android:layout_width="16dp" 
     android:layout_height="16dp" 
     android:layout_alignLeft="@+id/product_price_sq_list" 
     android:layout_alignTop="@+id/product_price_sq_list" 
     android:layout_marginBottom="5dp" 
     android:background="@drawable/plus" /> 

    <LinearLayout 
     android:id="@+id/order_now" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/product_price_sq_list" 
     android:layout_alignParentLeft="true" 
     android:background="@android:color/white" 
     android:orientation="vertical" 
     android:visibility="gone" > 

     <EditText 
      android:id="@+id/product_count" 
      android:layout_width="64dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:ems="10" /> 

     <Button 
      android:id="@+id/insert_btn" 
      android:layout_width="40dp" 
      android:layout_height="20dp" 
      android:layout_gravity="center_horizontal" 
      android:background="@drawable/button_animated" 
      android:text="insert" 
      android:textSize="10sp" /> 
    </LinearLayout> 

</RelativeLayout> 

和繼承人活動代碼:

final class RowHolder { 
    ImageView productIcon; 
    TextView productName; 
    TextView productDescription; 
    TextView productPrice; 
    Button productInsertNow; 
    Button addProduct; 
    LinearLayout ln; 
    EditText productCount; 
} 
class ProductListAdapterSquare extends BaseAdapter implements IUpdateGridView{ 

    private final Context context; 
    private final List<ProductList> productList; 
    private final LayoutInflater inflater; 
    private final String imageDir; 

    public ProductListAdapterSquare(Context context, List<ProductList>list, String imgDir) { 
     this.context = context; 
     if (list == null) 
      productList = new ArrayList<ProductList>(); 
     else 
      productList = list; 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.imageDir = imgDir; 
     RecipiesApplication app = (RecipiesApplication)getApplication(); 
     app.setImageDir(imgDir); 
    } 

    public List<ProductList> getProductList() { 
     return productList; 
    } 

    public int getCount() { 
     int size = productList.size(); 
     return size; 
    } 

    public Object getItem(int position) { 
     Object item = productList.get(position); 
     return item; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     RowHolder rowHolder = null; 
     ProductList product = productList.get(position); 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.custom_product_list_square, null); 

      rowHolder = new RowHolder(); 
      rowHolder.productIcon = (ImageView)convertView.findViewById(R.id.product_image_icon_sq_list); 
      rowHolder.productName = (TextView)convertView.findViewById(R.id.product_name_sq_list); 
      rowHolder.productPrice = (TextView)convertView.findViewById(R.id.product_price_sq_list); 
      rowHolder.ln = (LinearLayout)convertView.findViewById(R.id.order_now); 
      rowHolder.addProduct = (Button)convertView.findViewById(R.id.insert_btn); 
      rowHolder.productCount = (EditText)convertView.findViewById(R.id.product_count); 

      rowHolder.productInsertNow = (Button)convertView.findViewById(R.id.order_btn); 
      rowHolder.productInsertNow.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        rowHolder.ln.setVisibility(View.VISIBLE); // not working... 

       } 
      }); 
      convertView.setTag(rowHolder); 
     } 
     else 
      rowHolder = (RowHolder)convertView.getTag(); 


     return convertView; 
    } 

    @Override 
    public void updateGridSquare(String id) { 

     GridView gridView = (GridView)findViewById(R.id.products_group_grid); 
     gridView.invalidateViews(); 
    } 
    @Override 
    public void notifyDataSetChanged() { 
     super.notifyDataSetChanged(); 
    } 
} 
+0

將''rowHolder =(RowHolder)convertView.getTag();' – Raghunandan

+0

仍然無法正常工作... – Aivus

+0

如果仍然應該將其移出。 – Raghunandan

回答

0

這將讓呼叫,只有當if (convertView == null)招了以下

rowHolder = (RowHolder)convertView.getTag(); 

rowHolder.productInsertNow.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

        rowHolder.ln.setVisibility(LinearLayout.VISIBLE); // not working... 

       } 
      }); 

希望這可以幫助...

+0

可悲的是它說「不能在一個不同的方法中定義的內部類中引用非最終變量rowHolder」並將rowHolder更改爲final不是一個解決方案。 – Aivus

+0

你的RowHolder類定義在哪裏......這個類或其他...也試圖通過靜態 – nitesh

+0

更新我的代碼。 – Aivus