2013-10-06 60 views
0

首先,我試圖實現的是:每當一個人點擊一個特定的按鈕(該按鈕在列表視圖行的每一行上),根據該按鈕的行應該改變顏色。自定義適配器 - 列表視圖setBackground current row

這是我到目前爲止嘗試沒有成功,因爲它給了我錯誤。

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

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(rowResourceId, parent, false); 

    ImageButton add_to_cart = (ImageButton) rowView.findViewById(R.id.add_to_cart_butt); 
    final ListView lv = (ListView) rowView.findViewById(R.id.product_listview); 
    final int thePosition = position; 

    add_to_cart.setClickable(true); 
    add_to_cart.setId(position); 
    add_to_cart.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      lv.setFocusable(true); // This is the line where error begins 
      lv.setBackgroundColor(Color.GREEN);   
     } 
    }); 

10-06 15:56:19.302: E/AndroidRuntime(1859): FATAL EXCEPTION: main 
10-06 15:56:19.302: E/AndroidRuntime(1859): java.lang.NullPointerException 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at classes.com.example.MyExample.itemAdapter$1.onClick(itemAdapter.java:66) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at android.view.View.performClick(View.java:4240) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at android.view.View$PerformClick.run(View.java:17721) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at android.os.Handler.handleCallback(Handler.java:730) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at android.os.Looper.loop(Looper.java:137) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at java.lang.reflect.Method.invoke(Method.java:525) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-06 15:56:19.302: E/AndroidRuntime(1859):  at dalvik.system.NativeStart.main(Native Method) 

我該如何解決?謝謝。

回答

0

只需更改rowView的顏色即可。或者編輯rowView的標籤n 讓我在我的應用程序中解決它的方式是(rowView.getTag()。equals(「clicked」){// changeBack} else {// defaultBack}

+0

我的問題是:如何更改的具體行的顏色? – user2742861

0

如下:

  • 在rowResourceId xml文件

    指定onclick屬性爲按鈕:

    安卓的onClick = 「onClickChangeBackground」;

  • 聲明全局最終顏色 - defaultColor這樣你就可以改變背景t o如果用戶錯過了他想要選擇的行,則爲原始文件。

  • 然後你的主要活動(使用列表視圖中的一個)內開發方法如下:

    public void onClickChangeBackground(View v) { 
        View rowView = (View) v.getParent() 
        ColorDrawable currentColor = (ColorDrawable) rowView.getBackground(); 
        if(currentColor.getColor() == Color.GREEN) 
        rowView.setBackgroundColor(defaultColor); 
        else 
        rovView.setBackgroundColor(Color.GREEN); 
    } 
    
+0

你好。我得到這個錯誤:'10-07 05:11:44.958:E/AndroidRuntime(1222):引起:java.lang.ClassCastException:android.graphics.drawable.StateListDrawable不能轉換爲android.graphics.drawable.ColorDrawable 10-07 05:11:44.958:E/AndroidRuntime(1222):\t at com.example.MyExample.Products.onClickChangeBackground(Products.java:76)' – user2742861

相關問題