0

私はAndroid向けのプログラミングとプログラミング全般にかなり慣れていません。Webとstackoverflowで解決策を検索しましたが、見つからないようです。

フラグメントで処理されるさまざまなタブを持つアプリがあります。私のフラグメントの 1 つにリストビューが含まれています。ただし、リストビューは更新または更新されません。着信 SMS を受信すると更新されるはずです。フラグメントコードは次のとおりです。

public class SmsSectionFragment extends Fragment {

    @SuppressWarnings("null")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View listView = inflater.inflate(R.layout.fragment_section_sms, container, false);

        ListView mListData = (ListView) listView.findViewById(R.id.lvData);
        TextView aantalSms = (TextView) listView.findViewById(R.id.aantalSms);

        ArrayList<SmsInfo> listSms = getIntent().getParcelableArrayListExtra("ListSMS");

        // check condition 
        if(listSms != null && listSms.size() > 0) {
                // set data to list
                SmsInfoAdapter adapter = new SmsInfoAdapter(getActivity(), listSms);
                mListData.setAdapter(adapter);
                adapter.setNotifyOnChange(true);
                int count = listSms.size();
                aantalSms.setText(String.valueOf(count));

        }

        return listView;
    }

SMS の受信は、他の 3 つのクラスで処理されます。Receiver コードは次のとおりです。

package com.example.android.effectivenavigation;

インポート...など

public class SmsReceiver extends BroadcastReceiver {

static ArrayList<SmsInfo> listSms = new ArrayList<SmsInfo>();
@Override
public void onReceive(Context context, Intent intent) {



    // get SMS map from intent
    Bundle extras = intent.getExtras();
    // a notification message
    String messages = "";
    if ( extras != null ) {
        // get array data from SMS
        Object[] smsExtra = (Object[]) extras.get( "pdus" ); // "pdus" is the key

        for ( int i = 0; i < smsExtra.length; ++i ) {
            // get sms message
            SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);
            // get content and number
            String body = sms.getMessageBody();
            String adition = "  SMS::  ";
            String einde = " ::SMS";
            String sendme = adition + body + einde;
            String address = sms.getOriginatingAddress();
            // create display message
            messages += "SMS from " + address + " :\n";
            messages += body + "\n";


            //Send to Arduino
            Amarino.sendDataToArduino(context, DEVICE_ADDRESS, 'T', sendme);


            // store in the list
            listSms.add(new SmsInfo(address, body));
        }

        // better check size before continue
        if(listSms.size() > 0) {
            // notify new arriving message
            //Toast.makeText( context, messages, Toast.LENGTH_SHORT ).show();
            // set data to send
            Intent data = new Intent(context, MainActivity.class);
            // new activity
            data.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            data.putParcelableArrayListExtra("ListSMS", listSms);
            // start
            context.startActivity(data);


        }
    }
}

誰かが私の問題に光を当てることができますか? よろしくお願いします!

4

1 に答える 1

0

フラグメントを実際に更新するものは何もないように見えます。ブロードキャスト レシーバーは情報を受信して​​いますが、これをフラグメントに追加することはありません。

フラグメント宣言に次のように追加します。

private SMSReceiver receiver;
private IntentFilter filter;

onCreateView に次を追加します。

receiver = new SMSReceiver();
filter = new IntentFilter(SMSReceiver.YOUR_STRING_FILTER);
registerReceiver(receiver, filter);

そして、SMSReceiver クラスの onReceive に次のようなものを追加します。

adapter = new SmsInfoAdapter (this, yourData);
list.setAdapter(adapter);

これを Fragment クラスにすべて含めることが、私が行っていることです。

于 2013-02-06T16:23:18.480 に答える