Java 如何在ListView中使用CustomAdapter

Java 如何在ListView中使用CustomAdapter,java,android,listview,android-asynctask,custom-adapter,Java,Android,Listview,Android Asynctask,Custom Adapter,我试图在一个列表视图中显示IP地址。我创建了一个列表适配器&数组适配器,但它没有正确显示。因此我想我需要一个自定义适配器来显示地址。我已经使用文本视图来显示它。我需要适配器来显示显示在文本视图中 所以请帮我找到正确的方向:) 谢谢你的帮助 connect.java public class connect extends ListActivity implements OnClickListener{ WifiApManager wifiApManager; TextView tv; Butto

我试图在一个
列表视图中显示
IP地址
。我创建了一个
列表适配器
&
数组适配器
,但它没有正确显示。因此我想我需要一个自定义适配器来显示地址。我已经使用
文本视图
来显示它。我需要适配器来显示显示在文本视图中

所以请帮我找到正确的方向:)

谢谢你的帮助

connect.java

public class connect extends ListActivity implements OnClickListener{
WifiApManager wifiApManager;
TextView tv;
Button ipscan;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.connect);
    tv =(TextView) findViewById(R.id.iptv);
    ipscan=(Button) findViewById(R.id.scan);
    ipscan.setOnClickListener(this);  
lv = getListView();


}
class scan extends AsyncTask<Void, Void, ArrayList<ClientScanResult>>{ 
    public Context context;
    ArrayList<ClientScanResult> clients= new  ArrayList<ClientScanResult>();
    public scan(Context c)  // constructor to take Context
    {
        context = c;   // Initialize your Context variable
    }

    protected ArrayList<ClientScanResult> doInBackground(Void... params) {
        wifiApManager = new WifiApManager(context);  // use the variable here
        return wifiApManager.getClientList(false);

    }

protected void onPostExecute(ArrayList<ClientScanResult> clients){
    ArrayAdapter<ClientScanResult> adapter= new ArrayAdapter<ClientScanResult>(connect.this, android.R.layout.simple_list_item_1, clients);
            lv.setAdapter(adapter);
tv.setText("WifiApState: " + wifiApManager.getWifiApState() + "\n\n");
    tv.append("Clients: \n");
for (ClientScanResult clientScanResult : clients) 
    {

        //tv.append("IpAddr: " + clientScanResult.getIpAddr() + "\n");
        // tv.append("Device: " + clientScanResult.getDevice() + "\n");
       // tv.append("HWAddr: " + clientScanResult.getHWAddr() + "\n");
       // tv.append("isReachable: " + clientScanResult.isReachable()+ "\n");
    }
}
}
@Override
public void onClick(View v) {
    // TODO Click Action...
    scan myScan = new scan(this); // pass the context to the constructor
    myScan.execute();
}
}
注:
我对用于在TextView中显示值的行进行了注释。

您可以传递arraylist客户端,并在CustomAdapter中使用相同的行

异步任务的
onPostExecute

 CustomAdapter cus = new CustomAdapter(ActivityName.this,clients);
 lv.setAdapter(cus);
自定义适配器

public class CustomAarrayAdapter extends ArrayAdapter
{
LayoutInflater mInflater;
List<ClientScanResult> resultList;
public CustomArrayAdapter(Context context, List<ClientScanResult> list)
{
   super(context,0,list);
   resultList = list;
   mInflater = LayoutInflater.from(context);
}

@Override 
public View getView(int position, View convertView, ViewGroup parent) {  
ViewHolder holder; 

if (convertView == null) { 
convertView = mInflater.inflate(R.layout.row,parent,false);
// inflate custom layout called row 
holder = new ViewHolder();
holder.tv =(TextView) convertView.findViewById(R.id.textView1);  
holder.tv1 =(TextView) convertView.findViewById(R.id.textView2); 
holder.tv2 =(TextView) convertView.findViewById(R.id.textView3); 
// initialize textview
convertView.setTag(holder);
}
else
{
      holder = (ViewHolder)convertView.getTag();
}
      ClientScanResult result = (ClientScanResult)resultList.get(position);
      holder.tv.setText(result.getIpAddr());  
      holder.tv1.setText(result.getDevice()); 
      holder.tv2.setText(result.getHWAddr()); 
      // set the name to the text;

return convertView;

}

static class ViewHolder
{

   TextView tv,tv1,tv2;
} 
}
public类CustomAarrayAdapter扩展了ArrayAdapter
{
拉平机;
列表结果列表;
公共CustomArrayAdapter(上下文、列表)
{
超级(上下文,0,列表);
结果列表=列表;
mInflater=LayoutInflater.from(上下文);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父级){
视窗座;
如果(convertView==null){
convertView=mInflater.充气(R.layout.row,parent,false);
//膨胀称为行的自定义布局
holder=新的ViewHolder();
holder.tv=(TextView)convertView.findViewById(R.id.textView1);
holder.tv1=(TextView)convertView.findViewById(R.id.textView2);
holder.tv2=(TextView)convertView.findViewById(R.id.textView3);
//初始化文本视图
convertView.setTag(支架);
}
其他的
{
holder=(ViewHolder)convertView.getTag();
}
ClientScanResult=(ClientScanResult)resultList.get(位置);
holder.tv.setText(result.getIpAddr());
holder.tv1.setText(result.getDevice());
holder.tv2.setText(result.getHWAddr());
//将名称设置为文本;
返回视图;
}
静态类视窗夹
{
TextView电视、tv1、tv2;
} 
}
使用id为textView1、textView2和textView3的三个文本视图创建row.xml

import android.annotation.TargetApi;
import android.annotation.TargetApi;
import android.app.ListActivity;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListView3Activity extends ListActivity {

    ListView listView;
    static final String[] COUNTRIES = {"Argentina",
    "Bahamas",
    "Bangladesh",
    "China",
    "Denmark",
    "France",
    "Egypt",
    "Germany",
    "Hong Kong",
    "Iceland",
    "India",
    "Indonesia",
    "Iraq",
    "Israel",
    "Italy",
    "Malaysia",
    "New Zealand",
    "Pakistan",
    "Singapore",
    "United States"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        listView = getListView();

        //Own row layout
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, COUNTRIES);

        listView.setAdapter(dataAdapter);

        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view,
                    int position, long id) {
                Toast.makeText(getApplicationContext(),
                        ((TextView) view).getText(), Toast.LENGTH_LONG).show();
            }
        });
    }
}
导入android.app.ListActivity; 导入android.os.Build; 导入android.os.Bundle; 导入android.support.v4.app.NavUtils; 导入android.view.Menu; 导入android.view.MenuItem; 导入android.view.view; 导入android.widget.AdapterView; 导入android.widget.AdapterView.OnItemClickListener; 导入android.widget.ArrayAdapter; 导入android.widget.ListView; 导入android.widget.TextView; 导入android.widget.Toast; 公共类ListView3Activity扩展了ListActivity{ 列表视图列表视图; 静态最终字符串[]国家={“阿根廷”, “巴哈马”, “孟加拉国”, “中国”, “丹麦”, “法国”, “埃及”, “德国”, “香港”, “冰岛”, “印度”, “印度尼西亚”, “伊拉克”, “以色列”, “意大利”, “马来西亚”, “新西兰”, “巴基斯坦”, “新加坡”, “美国”}; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); listView=getListView(); //自有行布局 ArrayAdapter dataAdapter=新的ArrayAdapter(此, android.R.layout.simple_list_item_1,国家/地区); setAdapter(dataAdapter); setOnItemClickListener(新的OnItemClickListener(){ @凌驾 public void onItemClick(适配器视图适配器、视图、, 内部位置,长id){ Toast.makeText(getApplicationContext(), ((TextView)view.getText(),Toast.LENGTH_LONG.show(); } }); } }

您可以从这段代码中得到启发。我认为这很简单。如果您对这段代码有任何疑问,请告诉我。

正如Arul在问题中所说,他只想在ListView中显示IP地址,那么在这种情况下,他不需要任何customAdapter.:-)
import android.annotation.TargetApi;
import android.app.ListActivity;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListView3Activity extends ListActivity {

    ListView listView;
    static final String[] COUNTRIES = {"Argentina",
    "Bahamas",
    "Bangladesh",
    "China",
    "Denmark",
    "France",
    "Egypt",
    "Germany",
    "Hong Kong",
    "Iceland",
    "India",
    "Indonesia",
    "Iraq",
    "Israel",
    "Italy",
    "Malaysia",
    "New Zealand",
    "Pakistan",
    "Singapore",
    "United States"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        listView = getListView();

        //Own row layout
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, COUNTRIES);

        listView.setAdapter(dataAdapter);

        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view,
                    int position, long id) {
                Toast.makeText(getApplicationContext(),
                        ((TextView) view).getText(), Toast.LENGTH_LONG).show();
            }
        });
    }
}