2013-03-29 4 views
1

Я пытаюсь получить свой флажок в пользовательских адаптерах. Тем не менее, есть еще небольшая часть, которую я не получаю, поэтому моя программа продолжает получать силу, закрытую каждым типом, который я пытаюсь проверить.Реализация флажка с пользовательским адаптером

Это файловый менеджер, в котором перечислены все файлы изображений в SD-карте.

public class FileBrowserMusic extends ListActivity { 

    private File currentDir; 
    private FileArrayAdapter adapter; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.music_main); 

     currentDir = new File (Environment.getExternalStorageDirectory().getPath()); 
     List<Option>flss = new ArrayList<Option>(); 
     listFiles (currentDir, flss); 
     Collections.sort (flss); 
     ArrayAdapter<Option> adapter = new FileArrayAdapter(this, flss); 
      setListAdapter(adapter); 
     registerForContextMenu(getListView()); 
    } 

    // Recursively search for all image files. 
    private void listFiles (File f, List<Option> flss) { 
     if(f.isDirectory()){ 
      File[] files = f.listFiles(); 

      try { 
       for (File ff : files){ 
        if(!ff.isDirectory()) { 
         if(ff.getName().endsWith(".jpg")) { 
          Log.d(" FILES",ff.getName()); 
          flss.add(new Option (ff.getName(),"Files Size: "+ff.length(),ff.getAbsolutePath())); 
         } 
        } 
        else { 
         listFiles(ff, flss); 
        } 
       } 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       //e.printStackTrace(); 
      } 
     } 
    } 

} 

Это мой класс адаптера.

public class FileArrayAdapter extends ArrayAdapter<Option> { 

    private Context c; 
    private int id; 
    private List<Option>items; 
    private Activity context; 

    public FileArrayAdapter(Activity context, List<Option> objects) { 
     super(context, R.layout.music_view, objects); 

     this.context = context; 
     items = objects; 
    } 

    public Option getItem (int i) { 
     return items.get (i); 
    } 

    static class ViewHolder { 
     protected TextView name, size; 
     protected CheckBox checkbox; 
    } 

    @Override 
public View getView (int position, View convertView, ViewGroup parent) { 
    // View v = convertView; 
    final Option o = items.get(position); 
    /*if (v == null) { 
     LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.music_view, null);*/ 
    View v = null; 
    final ViewHolder viewHolder = new ViewHolder(); 
    if (convertView == null) { 
     LayoutInflater inflator = context.getLayoutInflater(); 
     v = inflator.inflate(R.layout.music_view, null); 

     //TextView t1 = (TextView) v.findViewById(R.id.backDot); 
     //TextView t2 = (TextView) v.findViewById(R.id.backPDir); 
     viewHolder.name = (TextView) v.findViewById(R.id.name); 
     viewHolder.size = (TextView) v.findViewById(R.id.size); 
     viewHolder.checkbox = (CheckBox) v.findViewById(R.id.check); 
     viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // TODO Auto-generated method stub 
       Option element = (Option) viewHolder.checkbox.getTag(); 
       element.setSelected(buttonView.isChecked()); 
       Log.v("Checked : ", ""+ element.getName()); 
      } 

     }); 

     v.setTag(viewHolder); 
     viewHolder.checkbox.setTag(items.get(position)); 

    } else { 
     v = convertView; 
     ((ViewHolder) v.getTag()).checkbox.setTag(items.get(position)); 
    } 

    ViewHolder holder = (ViewHolder) v.getTag(); 
    holder.name.setText(o.getName()); 
    holder.size.setText(o.getPath()); 
    holder.checkbox.setChecked(o.isSelected()); 

    return v; 
} 

} 

My option класс.

public class Option implements Comparable<Option>{ 

    private String name; 
    private String data; 
    private String path; 
    boolean selected = false; 

    public Option (String n, String d, String p) { 
     name = n; 
     data = d; 
     path = p;  
    } 

    public Option (String n, String d, String p, boolean s) { 
     name = n; 
     data = d; 
     path = p;  
     selected = s;  
    } 

    public void setName (String n) { 
     name = n; 
    } 

    public void setData (String d) { 
     data = d; 
    } 

    public void setPath (String p) { 
     path = p; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getData() { 
     return data; 
    } 

    public String getPath() { 
     return path; 
    } 

    public boolean isSelected() { 
     return selected; 
    } 

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

    public int compareTo(Option o) { 
     if (this.name != null) { 
      return this.name.toLowerCase().compareTo(o.getName().toLowerCase()); 
     } else { 
      throw new IllegalArgumentException(); 
     } 
    } 

} 

И, наконец, мой 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="wrap_content"> 

    <TextView android:text="@+id/name" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:id="@+id/label" 
     android:layout_marginLeft="15dp" 
     android:layout_marginTop="5dp" 
     android:textStyle="bold" 
     android:textSize="20sp"></TextView> 

    <TextView android:text="@+id/size" 
     android:layout_below="@+id/label" 
      android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:id="@+id/sub" 
     android:layout_marginLeft="15dp" 
     android:textSize="15sp"></TextView> 

    <CheckBox android:id="@+id/check" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_marginLeft="4dp" 
     android:layout_marginRight="10dp" android:layout_alignParentRight="true" 
     ></CheckBox> 
</RelativeLayout> 

Где я пошла не так? Первоначально мой код предназначался только для того, чтобы выводить только файлы изображений в listview. После этого я попытался реализовать флажок, но не смог.

Цените его.

Код довольно запутанный на данный момент из-за всех испытаний и других вещей.

T1 и T2 являются моими кодами ранее, когда я делаю файловый менеджер. Можете проигнорировать это, я не думаю, что это не должно противоречить моему текущему коду. Я удалю его и проведу.

Это мой журнал.

03-29 18:37:56.086: E/AndroidRuntime(4299): FATAL EXCEPTION: main 
03-29 18:37:56.086: E/AndroidRuntime(4299): java.lang.NullPointerException 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at sg.joogle.safeit.FileArrayAdapter.getView(FileArrayAdapter.java:98) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.AbsListView.obtainView(AbsListView.java:2033) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1244) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.ListView.onMeasure(ListView.java:1155) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.View.measure(View.java:12723) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.View.measure(View.java:12723) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.View.measure(View.java:12723) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:812) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.View.measure(View.java:12723) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.View.measure(View.java:12723) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.os.Looper.loop(Looper.java:137) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-29 18:37:56.086: E/AndroidRuntime(4299):  at dalvik.system.NativeStart.main(Native Method) 
+1

Можете ли вы разместить логарифм после закрытия силы? – Tushar

+0

Прежде всего отправьте свою трассировку logcat ... и, во-вторых, t1, t2 являются нулевыми, так как нет связанных с ними представлений в приведенном выше макете – Pragnani

+0

Hi @Pragnani Я отправил лог-кота. И отредактировал сообщение – user1778855

ответ

0

вы проверяете для о - нуль, но за пределами этого, если блок вы назначаете SetText с o.getName. Возможно ли, что o действительно было нулевым в этот момент?

+0

Я внесла изменения в функцию getView и удалил ненужные коды. Прямо сейчас я могу открыть, не имея силы, но это ничего мне не показывает. Где-нибудь я ошибался? – user1778855

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