2013-10-14 26 views
0
public class ExemptListView extends Activity { 

DbHandler dbHandler; 
Cursor c; 
ArrayList<Devices> list; 
MycustomAdapter adapter; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview); 

    //final ListView listview_var = (ListView) findViewById(R.id.listView1); 
    dbHandler = new DbHandler(getApplicationContext()); 

    list = new ArrayList<Devices>(); 
    generateListofDevices(); 
    for (int i = 0; i < list.size(); i++) { 
     Log.i("Dhiraj", list.get(i).devicename + " : " 
       + list.get(i).IpAddress + " : " + list.get(i).checked); 

    } 

    adapter = new MycustomAdapter(this, android.R.layout.simple_list_item_1,list); 

    ListView lv=(ListView)findViewById(R.id.listView1); 
    lv.setAdapter(adapter); 
    Log.i("Dhiraj"," Adapter set"); 

    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      Log.i("Dhiraj","lv.setitemclicklistener"); 
      Devices dv=(Devices)arg0.getItemAtPosition(arg2); 
      //Toast.makeText(getApplicationContext(), 
       //  "Clicked on Row: " + dv.devicename, 
        // Toast.LENGTH_LONG).show();    
     } 
    }); 

    checkbuttonclick(); 
} 

private void generateListofDevices() { 
    c = dbHandler.GetCursor(dbHandler.Devices_List_db); 
    Log.i("Dhiraj", "generating lsit "); 
    if (c != null) { 
     if (c.moveToFirst()) 
      do { 
       Boolean Checked = false; 
       Log.i("Dhiraj", c.getString(1) + " : " + c.getString(2) 
         + " : " + c.getString(3)); 
       if (c.getString(3) == "Y") 
        Checked = true; 
       Devices d = new Devices(c.getString(1), c.getString(2), 
         Checked); 
       list.add(d); 
      } while (c.moveToNext()); 
    } 
} 

public class Devices { 
    String devicename = null; 
    String IpAddress = null; 
    Boolean checked = false; 

    Devices(String devicename, String IpAddress, Boolean checked2) { 
     this.devicename = devicename; 
     this.IpAddress = IpAddress; 
     this.checked = checked2; 
    } 

    public void setSelected(boolean selected) { 
     this.checked = selected; 
    } 

} 

private class MycustomAdapter extends ArrayAdapter<Devices> { 
    private ArrayList<Devices> Deviceslist; 

    public MycustomAdapter(Context context, int resource, 
      ArrayList<Devices> DeviceList) { 
     super(context, resource, DeviceList); 
     this.Deviceslist = new ArrayList<Devices>(); 
     this.Deviceslist.addAll(DeviceList); 
     Log.i("Dhiraj","MycustomAdapter constructor cmpleted"); 
    } 

    private class ViewHolder { 
     TextView Name; 
     TextView IP; 
     CheckBox Exempt;    
    } 

    public View getView(int position, View convertview, ViewGroup parent) { 
     Log.i("Dhiraj"," GET View"); 
     ViewHolder holder = null; 

     if (convertview == null) { 
      Log.i("Dhiraj","convertview is null"); 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertview = vi.inflate(R.layout.custom_checkboxlist, null); 

      Log.i("Dhiraj", convertview.toString()); 
      Log.i("Dhiraj","NEw Holder"); 
      holder = new ViewHolder(); 
      holder.Name = (TextView) findViewById(R.id.DEVNAME); 
      holder.IP = (TextView) findViewById(R.id.DEVADDR); 
      holder.Exempt = (CheckBox) findViewById(R.id.EXEMPT); 
      convertview.setTag(holder); 

      Log.i("Dhiraj","convertview.setTag(holder)"); 
      holder.Exempt.setOnClickListener(new OnClickListener() {      
       @Override 
       public void onClick(View v) { 

        Log.i("Dhiraj"," on click listener"); 

        CheckBox cb = (CheckBox) v; 
        Devices devices = (Devices) cb.getTag(); 

        Toast.makeText(
          getApplicationContext(), 
          "Clicked on Checkbox: " + cb.getText() + " is " 
            + cb.isChecked(), Toast.LENGTH_LONG) 
          .show(); 
        devices.setSelected(cb.isChecked()); 
       } 
      }); 
     }   
     else 
     { 
      Log.i("Dhiraj","Else"); 
      holder=(ViewHolder)convertview.getTag(); 
     } 

     Log.i("Dhiraj","Done with null and else"); 

     Devices device=Deviceslist.get(position);Log.i("Dhiraj",Deviceslist.get(position)+""); 
     holder.Name.setText(device.devicename);Log.i("Dhiraj",device.devicename); 
     holder.IP.setText(device.IpAddress);Log.i("Dhiraj",device.IpAddress); 
     holder.Exempt.setChecked(device.checked);Log.i("Dhiraj",device.checked.toString()); 
     Log.i("Dhiraj"," View Over"); 
     return convertview; 
    } 
} 

public void checkbuttonclick(){ 
    Button Apply=(Button)findViewById(R.id.Apply); 
    Log.i("Dhiraj","chcek button"); 
    ArrayList<Devices> deviceslist=adapter.Deviceslist; 
    for(int i=0;i<deviceslist.size();i++){ 
     Devices d=deviceslist.get(i); 
     if(d.checked) 
     Log.i("Dhiraj", d.devicename +" is Exempted"); 
    } 
} 

}android.widget.LinearLayout所有可能的錯誤類型

的logcat中顯示以下錯誤

10-14 08:51:18.486: I/Dhiraj(25481): Database Name: DevicesList 
10-14 08:51:18.494: I/Dhiraj(25481): returning all Values 
10-14 08:51:18.494: I/Dhiraj(25481): generating lsit 
10-14 08:51:18.494: I/Dhiraj(25481): Ujgffbb : Vhncfcv : N 
10-14 08:51:18.494: I/Dhiraj(25481): Uj : Vh : N 
10-14 08:51:18.494: I/Dhiraj(25481): Ihdecv : Ibswchj : N 
10-14 08:51:18.494: I/Dhiraj(25481): Ih : Ib : N 
10-14 08:51:18.494: I/Dhiraj(25481): Hhbb : Plhb : N 
10-14 08:51:18.494: I/Dhiraj(25481): Ujgffbb : Vhncfcv : false 
10-14 08:51:18.494: I/Dhiraj(25481): Uj : Vh : false 
10-14 08:51:18.494: I/Dhiraj(25481): Ihdecv : Ibswchj : false 
10-14 08:51:18.494: I/Dhiraj(25481): Ih : Ib : false 
10-14 08:51:18.502: I/Dhiraj(25481): Hhbb : Plhb : false 
10-14 08:51:18.502: I/Dhiraj(25481): MycustomAdapter constructor cmpleted 
10-14 08:51:18.502: I/Dhiraj(25481): Adapter set 
10-14 08:51:18.502: I/Dhiraj(25481): chcek button 
10-14 08:51:18.518: I/Dhiraj(25481): GET View 
10-14 08:51:18.518: I/Dhiraj(25481): convertview is null 
10-14 08:51:18.518: I/Dhiraj(25481): [email protected] 
10-14 08:51:18.518: I/Dhiraj(25481): NEw Holder 
10-14 08:51:18.518: I/Dhiraj(25481): convertview.setTag(holder) 
10-14 08:51:18.525: W/dalvikvm(25481): threadid=1: thread exiting with uncaught exception (group=0x40ab5210) 
10-14 08:51:18.533: E/AndroidRuntime(25481): FATAL EXCEPTION: main 
10-14 08:51:18.533: E/AndroidRuntime(25481): java.lang.NullPointerException 
10-14 08:51:18.533: E/AndroidRuntime(25481): at com.dhiraj.projectsierra_v1.ExemptListView$MycustomAdapter.getView(ExemptListView.java:136) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.AbsListView.obtainView(AbsListView.java:2144) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.ListView.measureHeightOfChildren(ListView.java:1244) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.ListView.onMeasure(ListView.java:1155) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.View.measure(View.java:12751) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.View.measure(View.java:12751) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.FrameLayout.onMeasure(FrameLayout.java:295) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.View.measure(View.java:12751) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.LinearLayout.measureVertical(LinearLayout.java:812) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.View.measure(View.java:12751) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.widget.FrameLayout.onMeasure(FrameLayout.java:295) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2120) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.View.measure(View.java:12751) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1106) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2558) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.os.Looper.loop(Looper.java:137) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at android.app.ActivityThread.main(ActivityThread.java:4697) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at java.lang.reflect.Method.invokeNative(Native Method) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at java.lang.reflect.Method.invoke(Method.java:511) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
10-14 08:51:18.533: E/AndroidRuntime(25481): at dalvik.system.NativeStart.main(Native Method) 

我沒有得到什麼是錯的。 Layout有錯誤嗎? 我正在使用一個LinearLayout,其中包含2個TextViews和一個複選框。這layout用於生成ListView

+0

什麼是第136行?有什麼是'null' – codeMagic

+0

我猜'holder.Exempt'爲空。你能發佈你的佈局xml文件嗎? – Szymon

回答

1

它看起來像你沒有正確使用findViewById()。如果DEVNAMEDEVADDREXEMPTid S的custom_checkboxlist.xml裏面那麼他們應該用什麼來引用類似

holder.Name = (TextView) convertview.findViewById(R.id.DEVNAME); 
holder.Name = (TextView) convertview.findViewById(R.id.DEVADDR); 
holder.Name = (TextView) convertview.findViewById(R.id.EXEMPT); 

你需要看看內部的膨脹layout。否則,他們正在尋找從setContentView()以前膨脹的layout一側。

編輯爲了清楚

From the Docs

查找所識別通過從XML這是在的onCreate(束)處理的id屬性

於是方式的圖你正在做的是看layout,這是最初膨脹setContentView()。現在你已經膨脹這個其他的XML文件,該文件是包含View是你試圖訪問,所以你需要把新近充氣layout變量findViewById()讓應用程序知道之前往裏layout,而不是一最初處理layout

+0

是的,它現在正在工作。但你能解釋我爲什麼這樣嗎? –

+0

我已經編輯了希望更好的解釋。但基本上,它正在尋找錯誤的'佈局'文件'的'視圖'。 – codeMagic

+0

現在我得到一個清晰的圖片。感謝您的解釋... :) –

相關問題