0

Webサービスから取得している特定のフォルダーのフォルダーイメージと名前を追加するカスタムアダプターを追加しようとしています。

私のコードを見てください:

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 []を使用してWeb応答を取得し、次にプロパティ1(フォルダ名をID)を取得しています。フォルダーの画像とフォルダーの名前が表示されるカスタムリストを追加する方法や、正しい方法でガイドできるカスタムリストを追加する方法を教えてもらえますか?ありがとう

4

1 に答える 1

0

まず for ループ内にアダプターを設定する必要はありません。forループを実行するたびに、アダプターをリストビューに設定します。あなたのコードは間違っていませんが、効率的でもありません。以下の方法で ArrayAdapter を 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);

また、フォルダ イメージとフォルダ名を使用してカスタム リストにしたい場合は、ArrayAdapter の代わりに BaseAdater を使用する必要があります。

BaseAdapter サンプル デモを使用したカスタム リストビューから、BaseAdapter でカスタム リストを使用する方法についてより良いアイデアを得ることができます。それが役立つことを願っています。

于 2013-02-26T06:19:00.193 に答える