簡體   English   中英

沒有顯示-使用SimpleAdapter的ListView

[英]No display - ListView using SimpleAdapter

我正在嘗試顯示范圍內所有wifi AP的列表,即包括具有相同SSID的那些AP,因為默認wifi設置中未顯示這些SSID。

這是我第一次嘗試使用Android SDK,到目前為止,我已經完成了:

package com.iiitd.wifistats;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class WiFiStats extends Activity implements View.OnClickListener {

    WifiManager wifi;
    List<ScanResult> scanResults;
    ArrayList<Map<String, Integer>> list;
    SimpleAdapter adapter;
    ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        if (!wifi.isWifiEnabled()) {
            Toast.makeText(getApplicationContext(), "Turning on WiFi...", Toast.LENGTH_LONG).show();
            wifi.setWifiEnabled(true);
        }

        carryON();
    }

    private void carryON(){
        final Button button = (Button) findViewById(R.id.buttonScan);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                wifi = (WifiManager) v.getContext().getSystemService(Context.WIFI_SERVICE);
                scanResults = wifi.getScanResults();
                Toast.makeText(getApplicationContext(), "Scanning...", Toast.LENGTH_SHORT).show();
                list = buildData(scanResults);
                //Toast.makeText(getApplicationContext(), list.toString(), Toast.LENGTH_SHORT).show();
                adapter = new SimpleAdapter(v.getContext(), list, R.layout.listitem, new String[]{"BSSID", "strength"}, new int[] {R.id.BSSID, R.id.strength});
                //Toast.makeText(getApplicationContext(), adapter.toString(), Toast.LENGTH_SHORT).show();
                listview = (ListView) findViewById(R.id.list);
                listview.setAdapter(adapter);
            }
        });
    }

    private ArrayList<Map<String, Integer>> buildData(java.util.List<ScanResult> s) {
        ArrayList<Map<String, Integer>> list = new ArrayList<Map<String, Integer>>();
        for (ScanResult result : s) {
            list.add(putData(result.BSSID, result.level));
        }
        return list;
    }

    private HashMap<String, Integer> putData(String BSSID, int level) {
        HashMap<String, Integer> item = new HashMap<String, Integer>();
        item.put(BSSID, level);
        return item;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.wi_fi_stats, menu);
        return true;
    }

    @Override
    public void onClick(View view) {

    }
}

這是我的activity_xml:

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Scan"
            android:id="@+id/buttonScan"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"/>

    <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/list"
            android:layout_above="@+id/buttonScan"
            android:layout_alignParentLeft="true"
            android:layout_marginBottom="14dp"/>
</RelativeLayout>

這是listitem.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="?android:attr/listPreferredItemHeight"
                android:padding="6dip">

    <TextView
            android:id="@+id/strength"
            android:layout_width="fill_parent"
            android:layout_height="26dip"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:ellipsize="marquee"
            android:singleLine="true"
            android:text="Description"
            android:textSize="12sp"/>
    <TextView
            android:id="@+id/BSSID"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/strength"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_alignWithParentIfMissing="true"
            android:gravity="center_vertical"
            android:text="Example application"
            android:textSize="16sp"/>

</RelativeLayout>

當我開始掃描時,沒有顯示列表。 但是,如果我用烤面包,則可以看到列表正確地形成了。 有人可以在這里引導我嗎? 謝謝。

在這里看看代碼

adapter = new SimpleAdapter(v.getContext(), list, R.layout.listitem, new String[]{"BSSID", "strength"}, new int[] {R.id.BSSID, R.id.strength});

String數組告訴適配器訪問您定義的映射時要使用的鍵。 在您的代碼中,您將這樣分配值

private HashMap<String, Integer> putData(String BSSID, int level) {
    HashMap<String, Integer> item = new HashMap<String, Integer>();
    item.put(BSSID, level);
    return item;
}

這是將級別的int分配給由字符串BSSID設置的鍵。 您需要更改代碼中所有出現的HashMap,以獲取String值和String鍵HashMap< String, String >並將該方法替換為以下內容

private HashMap<String, String> putData(String BSSID, int level) {
    HashMap<String, String> item = new HashMap<String, String>();
    item.put("BSSID", BSSID);
    item.put("strength", Integer.toString(level));
    return item;
}

您是否嘗試過擴展ListActivity而不是普通活動? 您可能需要將XML中的ListView的ID更改為android:id =“ @ id / android:list”

然后在您的caryON()方法中,將調用setListAdapter(adapter); ;。 初始化新的簡單適配器后

adapter = new SimpleAdapter(v.getContext(), list, R.layout.listitem, new String[]{"BSSID", "strength"}, new int[] {R.id.BSSID, R.id.strength});
setListAdapter(adapter);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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