如何使用ArrayAdapter添加自定义适配器?

如何使用ArrayAdapter添加自定义适配器?

问题描述:

我想添加自定义适配器,我想补充这是我从网络服务获得该特定文件夹的文件夹图像和名称。如何使用ArrayAdapter添加自定义适配器?

请看看我的代码:

ListView listview; 
LazyAdapter adapter; 

private String[] folderslist; 

String User_ID; 
int i; 

static String ID = "ID"; 
static String KEY_Name = "FolderName"; 
static String ParentID = "ParentID"; 
static String CreatedBy = "CreatedBy";        

private static final String NAMESPACE = "http://tempuri.org/"; 
private static final String URL = "http://***.***.*.*/somethinghere/something.asmx"; 
private static final String TREEDATA_METHOD = "TreeData"; 
private static final String SOAP_ACTION_TREEDATA = "http://tempuri.org/TreeData"; 

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

    Intent Intent = getIntent(); 
    User_ID = Intent.getStringExtra("User_ID"); 

    Treedata(); 

    listview.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      String item = (String) listview.getItemAtPosition(position); 
      ID = item;   
      Intent mIntent = new Intent(getApplicationContext(), Files_Folders_Activity.class); 
      mIntent.putExtra("ID", ID); 

      startActivity(mIntent); 

     } 
    }); 

} 

     public void Treedata(){ 
      try { 

       SoapObject datarequest = new SoapObject(NAMESPACE, TREEDATA_METHOD); 

       datarequest.addProperty("UserID", User_ID); 

       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
       envelope.dotNet = true; 
       envelope.setOutputSoapObject(datarequest); 

       HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
       androidHttpTransport.debug = true; 

       androidHttpTransport.call(SOAP_ACTION_TREEDATA, envelope); 

       SoapObject folderResponse = (SoapObject)envelope.getResponse(); 

       Log.i("AllFolders", folderResponse.toString()); 

       folderslist = new String[folderResponse.getPropertyCount()]; 

       for(i=0; i<folderResponse.getPropertyCount(); i++) { 

        SoapObject SingleFolder = (SoapObject)folderResponse.getProperty(i); 

        Log.i("SingleFolder", SingleFolder.toString()); 

        ID= SingleFolder.getProperty(0).toString(); 
        KEY_Name = SingleFolder.getProperty(1).toString(); 
        ParentID = SingleFolder.getProperty(2).toString(); 
        CreatedBy= SingleFolder.getProperty(3).toString();      

        folderslist[i] = SingleFolder.getProperty(0).toString(); 

        folderslist = new String[] {ID}; 

        } 

        data = new ArrayList<FolderList>(); 
        for (int i = 0; i < folderslist.length; i++) { 

        FolderList item = new FolderList(images[i], folderslist[i]); 
        data.add(item); 

      } 
        listview = (ListView)findViewById(R.id.listview); 

        LazyAdapter adapter = new LazyAdapter(this, R.layout.jpg_row, data); 

        listview.setAdapter(adapter); 

        listview.setOnItemClickListener(this); 
      } 

     } 

LazyAdapter:

public class LazyAdapter extends ArrayAdapter<FolderList> { 

Context context; 

public LazyAdapter(Context context, int resourceId, List<FolderList> items) { 
    super(context, resourceId, items); 
    this.context = context; 
} 

/*private view holder class*/ 
private class ViewHolder { 
    ImageView imageView; 
    TextView txtTitle; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    FolderList data = getItem(position); 

    LayoutInflater mInflater = (LayoutInflater) context 
      .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.jpg_row, null); 
     holder = new ViewHolder(); 

     holder.txtTitle = (TextView) convertView.findViewById(R.id.txtTitle); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.imgIcon); 
     convertView.setTag(holder); 
    } else 
     holder = (ViewHolder) convertView.getTag(); 

    holder.txtTitle.setText(data.getTitle()); 
    holder.imageView.setImageResource(data.getIcon()); 

    return convertView; 
} 

}

我使用的String []来获得网络响应,然后财产1的ID文件夹名称。任何人都可以让我知道如何添加自定义列表,其中显示文件夹图像和文件夹名称或可以正确引导?由于

首先没有必要设置为内循环的适配器。它会在您每次运行循环时将您的适配器设置为列表视图。你的代码没有错,但也没有效率。你应该通过Below方式设置你的ArrayAdapter Outside for循环。

 for(i=0; i<folderResponse.getPropertyCount(); i++) { 

         SoapObject SingleFolder = (SoapObject)folderResponse.getProperty(i); 

         Log.i("SingleFolder", SingleFolder.toString()); 

         ID= SingleFolder.getProperty(0).toString(); 
         KEY_Name = SingleFolder.getProperty(1).toString(); 
         ParentID = SingleFolder.getProperty(2).toString(); 
         CreatedBy= SingleFolder.getProperty(3).toString(); 

         System.out.println(ID); 
         System.out.println(KEY_Name); 
         System.out.println(ParentID); 
         System.out.println(CreatedBy); 

         folderslist[i] = SingleFolder.getProperty(0).toString(); 


       } 
      listview = (ListView)findViewById(R.id.listview); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,android.R.id.text1, folderslist); 

     listview.setAdapter(adapter); 

     listview.setOnItemClickListener(this); 

此外,如果你想让它与文件夹图像和文件夹的名称自定义列表,你应该使用BaseAdater代替ArrayAdapter的。

你会得到从Custom Listview with BaseAdapter Sample Demo更好地了解您如何使用自定义列表与BaseAdapter。 希望它会帮助。

+0

我想自定义适配器,列表显示。问题是,我想使用自定义适配器从Web服务显示文件夹的文件夹图像和名称 – Shweta 2013-02-26 06:24:30

+0

@shiva:我已经编辑我的答案。 – 2013-02-26 06:28:01

+0

我明白了你的意思,但你有没有看过我的问题? – Shweta 2013-02-26 07:28:01