LayoutInflater的问题,想要实现输入框输入后点击按钮添加按钮到已有的布局,LayoutInflate的使用方法我都试过,但是找不出到底是哪里出了问题,log给出的错误信息我也都查看了,看不懂,但是就它高亮显示的地方我都查看了,但是就是找不出问题所在,只要输入完成后添加的时候就会报错,
Log信息:
10-19 10:52:18.621 1269-1269/com.ghost.ft_searches E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.ghost.ft_searches.FT_Searches.makeTagGUI(FT_Searches.java:73)
at com.ghost.ft_searches.FT_Searches.refreshButtons(FT_Searches.java:50)
at com.ghost.ft_searches.FT_Searches.makeTag(FT_Searches.java:65)
at com.ghost.ft_searches.FT_Searches.access$200(FT_Searches.java:23)
at com.ghost.ft_searches.FT_Searches$1.onClick(FT_Searches.java:87)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
下面是程序的代码
public class FT_Searches extends Activity{
private SharedPreferences savedSearches;
private TableLayout tag_tl;
private EditText query_et;
private EditText tag_et;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ft__searches);
//
savedSearches = getSharedPreferences("savedSearches",MODE_PRIVATE);
tag_tl = (TableLayout) findViewById(R.id.tag_tl);
query_et = (EditText) findViewById(R.id.query_et);
tag_et = (EditText) findViewById(R.id.tag_et);
Button save_bt = (Button) findViewById(R.id.save_bt);
save_bt.setOnClickListener(save_btListener);
Button clear_bt = (Button) findViewById(R.id.clear_bt);
clear_bt.setOnClickListener(clear_btListener);
//
refreshButtons(null);
}
private void refreshButtons(String newTag){
Set<String> strings = savedSearches.getAll().keySet();
String[] tags = strings.toArray(new String[strings.size()]);
Arrays.sort(tags, String.CASE_INSENSITIVE_ORDER);
//
if (newTag != null){
makeTagGUI(newTag, Arrays.binarySearch(tags, newTag));
}
else {
for (int index = 0; index < tags.length; ++index)
makeTagGUI(tags[index], index);
}
}
private void makeTag(String query, String tag){
String originalQuery = savedSearches.getString(tag, null);
SharedPreferences.Editor preferencesEditor = savedSearches.edit();
preferencesEditor.putString(tag, query);
preferencesEditor.apply();
//
if (originalQuery == null)
{
refreshButtons(tag);
}
}
private void makeTagGUI(String tag, int index){
LayoutInflater inflater = getLayoutInflater();
View newTagView = inflater.inflate(R.layout.new_tag_sv, null);
//
Button tag_nbt = (Button) findViewById(R.id.tag_nbt);
tag_nbt.setText(tag);
tag_nbt.setOnClickListener(tag_nbtListener);
//
Button edit_nbt = (Button) findViewById(R.id.edit_nbt);
edit_nbt.setOnClickListener(edit_nbtListener);
tag_tl.addView(newTagView, index);
}
private void clear_bt(){
tag_tl.removeAllViews();
}
public View.OnClickListener save_btListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (query_et.getText().length()>0 && tag_et.getText().length()>0){
makeTag(query_et.getText().toString(), tag_et.getText().toString());
query_et.setText("");
tag_et.setText("");
//
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(tag_et.getWindowToken(), 0);
}
else {
AlertDialog.Builder builder =
new AlertDialog.Builder(FT_Searches.this);
builder.setTitle(R.string.missingTitle);
builder.setPositiveButton(R.string.OK, null);
builder.setMessage(R.string.missingMessage);
//
AlertDialog errorDialog = builder.create();
errorDialog.show();
}
}
};
public View.OnClickListener clear_btListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder =
new AlertDialog.Builder(FT_Searches.this);
builder.setTitle(R.string.missingTitle);
builder.setPositiveButton(R.string.erase,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int button) {
clear_bt();
SharedPreferences.Editor preferencesEditor = savedSearches.edit();
preferencesEditor.clear();
preferencesEditor.apply();
}
});
builder.setCancelable(true);
builder.setNegativeButton(R.string.cancel, null);
builder.setMessage(R.string.missingMessage);
AlertDialog confirmDialog = builder.create();
confirmDialog.show();
}
};
public View.OnClickListener tag_nbtListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
String buttonText = ((Button)v).getText().toString();
String query = savedSearches.getString(buttonText, null);
String urlString = getString(R.string.searchUrl) + query;
Intent getURL = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
startActivity(getURL);
}
};
public View.OnClickListener edit_nbtListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
TableRow buttonTableRow = (TableRow) v.getParent();
Button searchButton = (Button) buttonTableRow.findViewById(R.id.tag_nbt);
String tag = searchButton.getText().toString();
tag_et.setText(tag);
query_et.setText(savedSearches.getString(tag, null));
}
};
}
求助
------解决思路----------------------
错误信息很清楚了makeTagGUI方法中某个控件为空,我估计是你找btn没找到
Button tag_nbt = (Button) findViewById(R.id.tag_nbt);
Button edit_nbt = (Button) findViewById(R.id.edit_nbt);
这两句估计应该是
Button tag_nbt = (Button) newTagView.findViewById(R.id.tag_nbt);
Button edit_nbt = (Button) newTagView.findViewById(R.id.edit_nbt);