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.xmlimport 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();
}
});
}
}