2011-05-29 27 views
5

Yardım! Stack Overflow'u ve son birkaç ay içinde katkıda bulunanları takdir etmeye gerçekten çok değer verdim. Birçok soru vardı, burada cevapları buldum ... ama bu bir yerde bulamıyorum ... Java ve Android için bir noob'um ve bunu anlamaya çalışıyorum. günlerdir. Bazı nedenlerden dolayı FileList adlı bir ListView nesnesine sahibim ve null döndürüyor ... Her şey yolunda gidiyor, ama fileList'i kullanmaya çalıştığım anda bir NullPointerException alıyorum ... bunu deklare etmeyi başarabiliyorum:Neden (ListView) findViewById döndürüyor null?

ListView fileList = (ListView)findViewById(R.id.open_ListView); 

Ama bu hayatın nesi yanlış anlamadığımı anlayamıyorum! Aşağıda pek çok kod içerdim, teorik olarak herhangi bir şekilde bu hata ile ilgili olabilecek herhangi bir kodun olması gerekir.

Lütfen, bu konuda herhangi bir yardım gerçekten takdir edilecektir! Teşekkürler!


Bu, kodun rahatsız edici bölümüdür. Sadece anahtar bloğunun OPEN_DIALOG kısmı ve diğer tüm switch'ler yeniDialog'larını görüntülemek için mükemmel çalışıyor. Ben

@Override 
protected Dialog onCreateDialog(int id) 
{ 
    Dialog newDialog = new Dialog(Minervalia.this); 
    switch(id) 
    { 
    case DIALOG_FILE_NEW: 
     newDialog.setContentView(R.layout.new_file); 
     newDialog.setTitle("New File"); 
     newDialog.setCancelable(true); 

     Button okBtn = (Button) newDialog.findViewById(R.id.ok_btn); 
     Button cancelBtn = (Button) newDialog.findViewById(R.id.cancel_btn); 
     final EditText widthEt = (EditText) newDialog.findViewById(R.id.width_edit); 
     final EditText heightEt = (EditText) newDialog.findViewById(R.id.height_edit); 

     okBtn.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       file_width = Integer.parseInt(widthEt.getText().toString()); 
       file_height = Integer.parseInt(heightEt.getText().toString()); 
       onCreate(null); 
       dismissDialog(DIALOG_FILE_NEW); 
      } 
     }); 

     cancelBtn.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       dismissDialog(DIALOG_FILE_NEW); 
      } 
     }); 
     return newDialog; 
    case DIALOG_OPEN: 
     newDialog.setContentView(R.layout.open_file); 
     newDialog.setTitle("Open File"); 
     newDialog.setCancelable(true); 

// ********** This next line returns null! Why? 
     ListView fileList = (ListView)findViewById(R.id.open_ListView); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, loadFileList()); 
     fileList.setAdapter(adapter); 
     fileList.setTextFilterEnabled(true); 

     fileList.setOnItemClickListener(new OnItemClickListener() 
     { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
      { 
       // When clicked, show a toast with the TextView text 
       Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     return newDialog; 
    case DIALOG_SAVE: 
     newDialog.setContentView(R.layout.save_file); 
     newDialog.setTitle("Save File"); 
     newDialog.setCancelable(true); 

//--==[[ Define the important TextViews for our Save Dialog ]]==--\\    
     TextView pathTxt = (TextView) newDialog.findViewById(R.id.save_path_info); 
     EditText fnTxt = (EditText) newDialog.findViewById(R.id.save_filename_edit); 

//--==[[ Define the Radio Buttons for our Save Dialog ]]==--\\   
     RadioButton JPEGoption = (RadioButton) newDialog.findViewById(R.id.save_JPEGoption); 
     RadioButton PNGoption = (RadioButton) newDialog.findViewById(R.id.save_PNGoption); 

     file_type = TYPE_JPEG; // Set this as the default option 

     JPEGoption.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       file_type = TYPE_JPEG; 
      } 
     }); 

     PNGoption.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       file_type = TYPE_PNG; 
      } 
     }); 

     Button save_okBtn = (Button) newDialog.findViewById(R.id.save_ok_btn); 
     Button save_cancelBtn = (Button) newDialog.findViewById(R.id.save_cancel_btn); 

     path = pathTxt.getText().toString(); 

     fnTxt.addTextChangedListener(new TextWatcher() 
     { 
      public void afterTextChanged(Editable s) 
      { 
      } 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) 
      { 
      } 
      public void onTextChanged(CharSequence s, int start, int before, int count) 
      { 
       filename = s.toString(); 
      } 
     }); 
     Toast.makeText(this, path, Toast.LENGTH_SHORT).show(); 
     Toast.makeText(this, filename, Toast.LENGTH_SHORT).show(); 
     save_okBtn.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       try 
       { 
        String fullName = path + filename; 
        Bitmap.CompressFormat compForm = Bitmap.CompressFormat.JPEG; // make sure our format is initialized 
        if(file_type == TYPE_JPEG) 
        { 
         fullName = fullName + ".jpg"; 
         compForm = Bitmap.CompressFormat.JPEG; 
        } 
        if(file_type == TYPE_PNG) 
        { 
         fullName = fullName + ".png"; 
         compForm = Bitmap.CompressFormat.PNG; 
        } 
        File thisImage = new File(fullName); 
        FileOutputStream out = new FileOutputStream(thisImage); 
        mBitmap.compress(compForm, 90, out); 

        new SingleMediaScanner(mContext, thisImage); 
        out.flush(); 
        out.close(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 

       dismissDialog(DIALOG_SAVE); 
      } 
     }); 

     save_cancelBtn.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       dismissDialog(DIALOG_SAVE); 
      } 
     }); 
     return newDialog; 
    } 
    return null; 
} 

private String[] loadFileList() 
{ 
    String[] mFileList = new String[0]; // generate empty array to avoid NullPointerException 
    try 
    { 
     filePath.canWrite(); 
    } 
    catch(SecurityException e) 
    { 
// Why isn't TAG recognized?... 
//   Log.e(TAG, "unable to write on the sd card " + e.toString()); 
    } 
    if(filePath.exists()) 
    { 
     FilenameFilter filter = new FilenameFilter() 
     { 
      public boolean accept(File dir, String filename) 
      { 
       File sel = new File(dir, filename); 
       return filename.contains(".jpg") || filename.contains(".png") || sel.isDirectory(); 
      } 
     }; 
     mFileList = filePath.list(filter); 
    } 
    else 
    { 
     mFileList = new String[0]; 
    } 
    return mFileList; 
} 

Bu

benim open_file.xml olduğunu ... yıldızlarla kusurlu hattı işaretlediğiniz:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView 
     android:id="@+id/open_ListView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
    </ListView> 
    <LinearLayout 
     android:id="@+id/open_ButtonLinearLayout" 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal"> 
     <Button 
      android:id="@+id/open_ok_btn" 
      android:text="Open" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content"> 
     </Button>  
     <Button 
      android:id="@+id/open_cancel_btn" 
      android:text="Cancel" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content"> 
     </Button>  
    </LinearLayout> 
</LinearLayout> 

Ve bu benim list_item.xml geçerli:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:textSize="16sp" > 
</TextView> 

cevap

8

yerine bu deneyin, değil Etkinliğin:

ListView fileList = (ListView)newDialog.findViewById(R.id.open_ListView); 
+0

YAY! İşe yaradı! Çok teşekkür ederim! ... Ve sonra bunu yayınladıktan sonra, ve bunu denedim, anladım ki, her şey için her şeyi yapıyordum ... ve hiç farketmedim ... duh! Teşekkürler teşekkürler teşekkürler! –

4

yapıyor deneyin

'Project' -> 'Clean ...' seçeneğine giderek, projenizi seçerek temiz bir yapı. o iletişim'ın düzeni içeride beri

+0

İşin tuhafı, bu benim için çalıştı. – mahdaeng

+0

Benim için de çalıştım. Teşekkürler Glitch! – conciliator

2

Sen benim ingilizce için code..before ListView fileList = (ListView)findViewById(R.id.open_ListView); ..sorry üstünde setcontenetview yazmak .... olmalı!

İlgili konular