2014-09-19 3 views
0

내 listview에서 원하는 항목이 배열 항목 [0]을 표시하고 배열 항목을 표시하는 일부 데이터와 함께 wi-fi 목록을 가져옵니다. [2] 사용자 지정 어댑터 및 소비 목록보기를 사용하지 않고 하위 항목으로사용자 정의 어댑터를 사용하지 않고 목록보기에 하위 항목을 추가하는 방법

여기는 목록보기에 데이터를 추가하는 코드입니다.

import java.util.List; 

import android.net.wifi.ScanResult; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 
import android.widget.ExpandableListView; 
import android.widget.ListView; 

public class MainActivity extends Activity { 
     WifiManager mainWifiObj; 
     WifiScanReceiver wifiReciever; 
     ExpandableListView list; 
     String wifis[]; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     list = (ExpandableListView)findViewById(R.id.ListView1); 
      mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
      wifiReciever = new WifiScanReceiver(); 
      mainWifiObj.startScan(); 

    } 
     protected void onPause() { 
       unregisterReceiver(wifiReciever); 
       super.onPause(); 
      } 

     protected void onResume() { 
       registerReceiver(wifiReciever, new IntentFilter(
       WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
       super.onResume(); 
      } 
     class WifiScanReceiver extends BroadcastReceiver { 
       @SuppressLint("UseValueOf") 
       public void onReceive(Context c, Intent intent) { 
       List<ScanResult> wifiScanList = mainWifiObj.getScanResults(); 
       wifis = new String[wifiScanList.size()]; 
       for(int i = 0; i < wifiScanList.size(); i++){ 
        wifis[i] = ((wifiScanList.get(i)).toString()); 
       } 
       String filtered[] = new String[wifiScanList.size()]; 
        int counter = 0; 
        for (String eachWifi : wifis) { 
         String[] temp = eachWifi.split(","); 

         filtered[counter] = temp[0].substring(5).trim()+"\n" + temp[2].substring(12).trim()+"\n" +temp[3].substring(6).trim();//0->SSID, 2->Key Management 3-> Strength 


         counter++; 

        } 
        list.setAdapter(new ArrayAdapter<String>(getApplicationContext(), 
          android.R.layout.simple_list_item_1, filtered)); 


       } 
      } 
} 
+0

왜 사용자 정의 어댑터를 사용하지 않으려는? 게으름? – Metehan

+0

나는 이것이 가능하다고 생각하지 않는다. –

+0

@Metehan 그러면 사용자 정의 어댑터를 사용하여 달성하는 방법을 알려주십시오. bacuase 나는 이것에 대해 커스텀 어댑터를 사용하여 많은 것을 검색했다.하지만 그들은 모두 이해하기가 어렵다. – user3853169

답변

1

맞춤 어댑터 만 사용하면됩니다.

import java.util.ArrayList; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Intent; 
import android.graphics.drawable.Drawable; 
import android.net.Uri; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class CustomListAdapter extends BaseAdapter { 

    private static final int TYPE_ITEM = 0; 

    private static final int TYPE_SUBITEM = 1; 

    private static final int TYPE_MAX_COUNT = TYPE_SUBITEM + 1; 

    private ArrayList<String> listViewItems; 

    public LayoutInflater mInflater; 

    public CustomListAdapter(Activity act){ 
     this.listViewItems= new listViewItems<String>(); 
     mInflater = (LayoutInflater) act.getApplicationContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    } 

    @SuppressLint("InflateParams") 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     //this finds out the type of the view that is being created 
     int type = getItemViewType(position); 

     switch (type) { 
      case TYPE_ITEM: 
       if(convertView == null) 
        convertView = mInflater.inflate(R.layout.listview_item, null); 
       //the following is an example to change things in subitem 
       TextView text_of_item = (TextView) convertView.findViewById(R.id.textView_item); 
       text_of_item.setText("item"+position); 
       break; 

      case TYPE_SUBITEM: 
       if(convertView == null) 
        convertView = mInflater.inflate(R.layout.listview_subitem, null); 
       //the following is an example to change things in subitem 
       TextView text_of_subitem = (TextView) convertView.findViewById(R.id.textView_subitem); 
       text_of_subitem.setText("subitem"+position); 
       break; 
     } 

     return convertView; 
    } 

    @Override 
    public int getItemViewType(int position) { 
      //you can achive this part via using integer IDs. Just change your ArrayList<String> to ArrayList<int> 

     if(listViewItems.get(position).equals("item")){//I suppose you give unique names to your subitems 
      return TYPE_ITEM; 
     }else if(listViewItems.get(position).equals("subitem")){//I suppose you give unique names to your subitems 
      return TYPE_SUBITEM; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return TYPE_MAX_COUNT; 
    } 


    @Override 
    public int getCount() { 
     return listViewItems.size(); 
    } 

    @Override 
    public String getItem(int position) {  
     return listViewItems.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public void addItem(String item){ 
     listViewItems.add(item); 
     notifyDataSetChanged(); 
    } 

    public void removeItem(int position){ 
     listViewItems.remove(position); 
     notifyDataSetChanged(); 
    } 

} 

다음과 같이 당신은 당신의 MainActivity에서이 전화를해야합니다 : 여기 내 목록보기 위해 만든 사용자 지정 어댑터에서 문제에 대한 변환 예는 또한

CustomListAdapter mCustomListAdapter = new CustomListAdapter (this); 

ListView mList = (ListView) findViewById(R.id.listview); 
mList.setAdapter(mCustomListAdapter); 

//when you want to add item to your listview just add the following: 
mCustomListAdapter.addItem("item"); 

//when you want to add subitem to your listview just add the following: 
mCustomListAdapter.addItem("subitem"); 

당신의 listview_subitem. XML은 다음과 같이 할 수있다 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list_subitem" 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:orientation="horizontal" > 

    <TextView 
    android:id="@+id/textView_subitem" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 

</LinearLayout> 

하고 listview_item.xml이 될 수 있습니다

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list_item" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:orientation="horizontal" > 

    <TextView 
    android:id="@+id/textView_item" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 
</LinearLayout> 

당신의 activity_main.xml :

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linear_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- Listview to display slider menu --> 
    <ListView 
     android:id="@+id/listview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</LinearLayout> 
+0

내 코드 에이 넣어하는 방법. – user3853169

+1

희망이 작동합니다 – Metehan

+0

이 코드에 내 코드를 붙여 넣는 방법을 얻지 못하고 있습니다 ... 왜 추가 된 단추가 있습니까? – user3853169