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