0

Я пытаюсь добавить пользовательский адаптер, где я хочу добавить образ папки и имя этой конкретной папки, которую я получаю от веб-служб.Как добавить пользовательский адаптер с помощью 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; 
} 

}

Я использую строку [], чтобы получить веб-ответ, а затем свойство 1, в котором имя папки идентификатор. Может ли кто-нибудь сообщить мне, как я могу добавить пользовательский список, в котором он показывает образ папки и имя папки или может направлять правильно? Спасибо

ответ

0

Сначала не нужно устанавливать адаптер внутри цикла. он будет устанавливать ваш адаптер в listview каждый раз, когда вы запускаете цикл. ваш код не ошибается, но также не эффективен. вы должны установить ArrayAdapter Outside для цикла by Below Way.

 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

Я хочу, чтобы пользовательский адаптер, список отображается. Проблема заключается в том, что я хочу использовать пользовательский адаптер для отображения образа папки и имени папок из веб-служб. – Shweta

+0

@shiva: я отредактировал свой ответ. –

+0

У меня есть ваш вопрос, но вы прочитали мой вопрос? – Shweta

Смежные вопросы