从对话框清除适配器

时间:2013-10-28 13:51:20

标签: android android-dialog android-adapter

我想从对话框中清除我的应用程序中的适配器。

MainActivity:

public class SearchActivity extends ListActivity {
private File currentDir;
private FileArrayAdapter adapter;
private String searchStr = "";
List<Option>dir = new ArrayList<Option>();
List<Option>fls = new ArrayList<Option>();
private String requestedStartDir;
public void readConf(){ //Methode "Konfiguration lesen"
    try {
    File conf=new File("/sdcard/config.xml"); //Konfigurationsdatei
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//
    DocumentBuilder db = dbf.newDocumentBuilder();//
            Document doc = db.parse(conf);//XML parsen
            requestedStartDir=doc.getElementsByTagName("Startordner").item(0).getTextContent();//String mit Tag "Startordner" befüllen
    }
    catch (Exception e) { //
        e.printStackTrace();//Fehlerbehandlung (keine)
      }
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.search_row);
    String gotDir="";
    readConf();
    Bundle extras = getIntent().getExtras();
    if(extras != null){
        searchStr = extras.getString("search");
        gotDir = extras.getString("Dir");
    }
    currentDir = new File(gotDir);
    adapter = new FileArrayAdapter(this,R.layout.search_layout,fls);
    fill(currentDir);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    try {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    Option o = adapter.getItem(position);
    onFileClick(o);
    }
    catch (Exception e){
        Log.e("TEST", Log.getStackTraceString(e));
    }
}

private void onFileClick(Option o)
{
    try {
        File file = new File(o.getPath());
        Log.d("TEST", o.getPath());
        Intent opdf = new Intent(Intent.ACTION_VIEW);
        opdf.setDataAndType(Uri.fromFile(file), "application/pdf");
        opdf.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        startActivity(opdf);
    }
    catch (Exception e){
        Log.e("TEST", Log.getStackTraceString(e));
    }

}

public static String removeExtension(String s) {

    String separator = System.getProperty("file.separator");
    String filename;

    // Remove the path upto the filename.
    int lastSeparatorIndex = s.lastIndexOf(separator);
    if (lastSeparatorIndex == -1) {
        filename = s;
    } else {
        filename = s.substring(lastSeparatorIndex + 1);
    }

    // Remove the extension.
    int extensionIndex = filename.lastIndexOf(".");
    if (extensionIndex == -1)
        return filename;

    return filename.substring(0, extensionIndex);
}

private void fill(File f)
{
    File[]dirs = f.listFiles();
      try{
         for(File ff: dirs)
         {
            if(ff.isDirectory()){
                dir.add(new Option(ff.getName(),"File",ff.getAbsolutePath()));
                File r = new File (ff.getPath());
                fill2(r);
            }
            else{
             String Name = (ff.getName().toLowerCase(Locale.GERMAN));
             if (Name.contains(searchStr.toLowerCase(Locale.GERMAN))){
                 fls.add(new Option(removeExtension(ff.getName()),"Folder",ff.getAbsolutePath()));
             }
            }
         }
     }catch(Exception e)
     {

     }
     Collections.sort(dir);
     Collections.sort(fls);
     dir.addAll(fls);
     this.setListAdapter(adapter);
     if (adapter.isEmpty()){
         Toast toast = Toast.makeText(this, "Keine Ergebnisse gefunden", Toast.LENGTH_LONG);
            toast.show();
            finish();
        }
     this.setListAdapter(adapter);
}
private void fill2(File f)
  {
    File[]dirs = f.listFiles();

     try{
         for(File ff: dirs)
         {
             if(ff.isDirectory()){
                 dir.add(new Option(ff.getName(),"Folder",ff.getAbsolutePath()));
                 fill2(ff);
             }
             else{
                 String Name = (ff.getName().toLowerCase(Locale.GERMAN));
                 if (Name.contains(searchStr.toLowerCase(Locale.GERMAN))){
                     fls.add(new Option(removeExtension(ff.getName()),"Folder",ff.getAbsolutePath()));
                 }
             }

         }
     }catch(Exception e)
     {

     }
}
 public void osp (View v){
  adapter.clear();
  adapter.notifyDataSetChanged();
 }

public void onSearchpressed(View view){
    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.dialog);
    dialog.setTitle("Suche...");
    Button dialogButton1 = (Button) dialog.findViewById(R.id.dialogAbbruch);
    // if button is clicked, close the custom dialog
    dialogButton1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });
    Button dialogButton2 = (Button) dialog.findViewById(R.id.dialogSuche);
    // if button is clicked, close the custom dialog
    dialogButton2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText et = (EditText) dialog.findViewById(R.id.editText1);
            String searchStr = et.getText().toString();
            if (et.getText().toString().equals("")){
                Toast toast = Toast.makeText(getBaseContext(), "Bitte einen Suchbegriff eingeben", Toast.LENGTH_LONG);
                toast.show();}
            else{
                osp(view);
                dialog.dismiss();
            }
        }
    });

    Button dialogButton3 = (Button) dialog.findViewById(R.id.dialogSucheAll);

    dialogButton3.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText et = (EditText) dialog.findViewById(R.id.editText1);
            String searchStr = et.getText().toString();
            File sdir = new File (requestedStartDir);
            currentDir = sdir;
            if (et.getText().toString().equals("")){
                Toast toast = Toast.makeText(getBaseContext(), "Bitte einen Suchbegriff eingeben", Toast.LENGTH_LONG);
                toast.show();}
            else{
                osp(view);
                dialog.dismiss();
            }
        }
    });

    dialog.show();
}

@Override
public void onBackPressed() {
                finish();
        }


}

FileArrayAdapter:

public class FileArrayAdapter extends ArrayAdapter<Option>{

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

public FileArrayAdapter(Context context, int textViewResourceId,
    List<Option> objects) {
super(context, textViewResourceId, objects);
c = context;
id = textViewResourceId;
items = objects;
}

public Option getItem(int i)
 {
 return items.get(i);
 }
 @Override
  public View getView(int position, View convertView, ViewGroup parent) {

      View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         v = vi.inflate(id,parent, false);
            }
      final Option o = items.get(position);
      if (o != null) {
              TextView t2 = (TextView) v.findViewById(R.id.textView2);

              if(t2!=null)
                t2.setText(o.getName());

            t2.setEllipsize(null);
            t2.setTextSize(54);
            t2.setBackgroundColor(Color.LTGRAY);
      }
      return v;
}

}

当我从MainActivity调用osp(view)时它会清除适配器,但是当我从对话框中调用它时它不会。我觉得很容易找到我的错,但我不能。为了让这个工作起来,我该怎么做?

1 个答案:

答案 0 :(得分:0)

您不能只从Activity调用Dialog方法,因为它没有活动的实例。此外,除了您的活动之外,您无法从任何其他课程致电osp(view),因为您的按钮没有View

我会在这里实现自定义listener,或者如果你不喜欢听众LocalBroadcastManager。在您选择监听器的情况下,answer可以帮助您理解听众。