[英]While changing my Relative layout to Linearlayout its throwing Null point exception on textview for TTS
我在列表視圖中使用TTS,而在相對布局中使用TTS則工作正常。現在我將布局更改為LinearLayout。它為該txt拋出Null指針異常,因此在單擊TTS按鈕時其顯示我的活動已停止。
這是我的Applicationadapter.java
@Override
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder = null;
tts = new TextToSpeech(activity, ApplicationAdapter.this);
//View v = convertView;
if ( convertView == null ){
convertView = inflator.inflate(R.layout.activity_row, null);
holder = new ViewHolder();
holder.text2 = (TextView) convertView.findViewById(R.id.text2);
holder.text1 = (TextView) convertView.findViewById(R.id.text1);
holder.count = (TextView) convertView.findViewById(R.id.count);
holder.pray = (Button) convertView.findViewById(R.id.pray);
holder.chk = (CheckBox) convertView.findViewById(R.id.checkbox);
holder.btnaudioprayer = (ImageButton) convertView.findViewById(R.id.btnaudioprayer);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton view,
boolean isChecked) {
int getPosition = (Integer) view.getTag();
items.get(getPosition).setSelected(view.isChecked());
}
});
holder.pray.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int getPosition= (Integer)v.getTag();
StringBuffer sb1 = new StringBuffer();
sb1.append("ID :");
sb1.append(Html.fromHtml(""+items.get(getPosition).getId()));
sb1.append("\n");
activity.praydata(items.get(getPosition).getId());
//activity.showAlertView(sb1.toString().trim());
//activity.praydata(Integer.parseInt(sb1.toString().trim()));
}
});
holder.btnaudioprayer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View V) {
View parent = (View)V.getParent();
ViewHolder vh = (ViewHolder)parent.getTag();
TextView tv = vh.text1;
speakOut(tv.getText().toString());
}
});
Application app = items.get(position);
holder.chk.setTag(position);
holder.pray.setTag(position);
holder.text2.setText(Html.fromHtml(app.getTitle()));
holder.text1.setText(Html.fromHtml(app.getContent()));
holder.count.setText(app.getCount()+"");
holder.chk.setChecked(app.isSelected());
return convertView;
}
它為textview轉換部分拋出的Null指針異常,但該textview是可見的,僅單擊該按鈕,我的應用程序已停止。
錯誤行是TextView tv = vh.text1;
試試下面
holder.btnaudioprayer.setTag(holder.text1.getText()); //set the tag to teh button
holder.btnaudioprayer.setOnClickListener(mClickListener);
然后
OnClickListener mClickListener= new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i(".........","hello"+v.getTag());
String s = v.getTag().toString(); // get the tag on button clikc
speakOut(s); // then call speakOut with the string
}
};
從評論
您不斷變化的布局與TextView tv = vh.text1;
為空
TextView tv = vh.text1; // this is null. assigning textview text1 to tv.
您的vh.text1
未初始化。 您將獲得NPE。
因此,只需將按鈕標簽設置為相應的值,然后在按鈕單擊和發出語音提示中獲得標簽即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.