簡體   English   中英

在將我的相對布局更改為Linearlayout時,它在TTS的textview上的拋出Null point異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM