gpt4 book ai didi

android - 为什么 (ListView)findViewById 返回 null?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:59 26 4
gpt4 key购买 nike

帮助!我真的很欣赏 Stack Overflow 和它在过去几个月里的贡献者。我有很多问题,我在这里找到了答案......但是这个我似乎无法在任何地方找到......我是 Java 和 Android 的菜鸟,我一直在努力弄清楚这个出去几天。出于某种原因,我有一个名为 fileList 的 ListView 对象,它返回 null ...一切都编译得很好,但是当我尝试使用 fileList 时我得到了一个 NullPointerException ...我已经能够将它隔离到它的声明中:

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

但我终究无法理解这行代码有什么问题!我在下面包含了很多代码,理论上它应该包含可能以任何方式与此错误相关的所有代码。

如有任何帮助,我们将不胜感激!谢谢!


这是有问题的代码部分。它只是开关 block 的 OPEN_DIALOG 部分,所有其他开关都可以很好地显示它们的新对话框。我已经用星标标记了违规行...

@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;
}

这是我的 open_file.xml:

<?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>

这是我的 list_item.xml:

<?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>

最佳答案

试试这个,因为它在对话框的布局内,而不是 Activity 的布局内:

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

关于android - 为什么 (ListView)findViewById 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com