0

我正在尝试用 Parse.com 上的数据库中的对象填充 ListView,但我遇到了麻烦,因为 ListView 不直接接受对象。我尝试通过遍历我的对象并将它们转换为字符串来制作字符串数组,但失败了。我也尝试在对象上调用 .toString ,但也没有运气。

我的计划是遍历所有解析对象,然后将它们添加到 ListView。然后,该 ListView 将用于允许用户搜索 Parse.com 中的所有对象。Parse.com 中的对象应替换 listview_array[] 数据......例如替换“BudWeiser”、“Dubra”等......

我为检索对象名称、价格、大小而创建的循环确实有效,但我无法将它放入 listView 中,因为我相信它是一个对象。

这是我的代码

package com.alpha.dealtap;

import java.lang.reflect.Array;
import java.util.List;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import com.parse.FindCallback;
import com.parse.Parse;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;

public class Search_Page extends Activity {

    private ListView lv;
    private EditText et;
    public String listview_array[] = { "BudWeiser", "Dubra", "Corona",
            "Jack Daniels", "Smirnoff", "Keystone Light", "Natural Ice" };
    private ArrayList<String> array_sort = new ArrayList<String>();
    public ArrayList<Object> _arrayList = new ArrayList<Object>();
    int textlength = 0;
    ParseObject dealsObject;
    int n = 0;

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

        Parse.initialize(this, "vUz23Z6zdIL1jbxbVWeLpsSdu1ClTu3YiG30zTWY",
                "4BTyoq1QQKows8qVJV7lvU3ZokSRrLFyOCPzffwJ");

        // Using this Parsequery...I can grab/locate the objects from the Parse
        // list...Here I grabbed the objects that have Burnettes and the price
        // of it
        // Eventually I may need to set a limit on how many results I will get
        // from the for loop....So far I think it is limited to 100 by default
        ParseQuery query = new ParseQuery("Deals");

        // query.whereEqualTo("Brand", "Burnettes");
        query.findInBackground(new FindCallback() {

            @Override
            public void done(List<ParseObject> objects, ParseException e) {
                if (e == null) {
                    Log.d("Brand", "Retrieved " + objects.size() + " Brands");
                    for (ParseObject dealsObject : objects) {
                        // use dealsObject.get('columnName') to access the
                        // properties of the Deals object

                        Object brands = dealsObject.get("Brand").toString();

                        _arrayList.add(brands);
                        listview_array = _arrayList;
                        //Having trouble putting strings into an array list....Have to cast as ArrayList and then it causes error!


                        Log.d("Size", (String) dealsObject.get("Size"));
                        Log.d("Price", (String) dealsObject.get("Price"));
                        Log.d("Brand", (String) dealsObject.get("Brand"));
                        n++;
                    }

                } else {
                    Log.d("Brand", "Error: " + e.getMessage());
                }
            }
        });




        Button store = (Button) findViewById(R.id.b1);
        Button deal = (Button) findViewById(R.id.b2);

        lv = (ListView) findViewById(R.id.ListView01);
        et = (EditText) findViewById(R.id.search_box);
        lv.setAdapter(new ArrayAdapter<Object>(this,
                android.R.layout.simple_list_item_1, listview_array));

        et.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s) {
                // Abstract Method of TextWatcher Interface.
            }

            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // Abstract Method of TextWatcher Interface.
            }

            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                textlength = et.getText().length();
                array_sort.clear();
                for (int i = 0; i < listview_array.length; i++) {
                    if (textlength <= listview_array[i].length()) {
                        if (et.getText()
                                .toString()
                                .equalsIgnoreCase(
                                        (String) listview_array[i].subSequence(
                                                0, textlength))) {
                            array_sort.add(listview_array[i]);
                        }
                    }
                }
                lv.setAdapter(new ArrayAdapter<String>(Search_Page.this,
                        android.R.layout.simple_list_item_1, array_sort));
            }
        });

        store.setOnClickListener(new View.OnClickListener() {
            // When you use OnClickListener...you need the onClick method inside
            // of it

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                startActivity(new Intent("com.alpha.dealtap.STOREPAGE"));
            }

        });

        deal.setOnClickListener(new View.OnClickListener() {
            // When you use OnClickListener...you need the onClick method inside
            // of it

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                startActivity(new Intent("com.alpha.dealtap.DEALPAGE"));

            }

        });

    }

    protected void onListItemClick(ListView l, View v, int position, long id) {

        // Cheese equals the position for which item that is clicked...so it
        // depends on which item that is clicked
        String cheese = "TAPDEAL";
        try {
            Class ourClass = Class.forName("com.alpha.dealtap." + cheese);
            Intent ourIntent = new Intent(Search_Page.this, ourClass);
            startActivity(ourIntent);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    protected void onPause() {

        super.onPause();
    }
4

1 回答 1

3

您可以将 BaseAdapter 类用于自定义列表视图。这是代码。

List<ParseObject> parse = new ArrayList<ParseObject>();

public class CustomChannelListAdapter extends BaseAdapter {

    private Context context;

    public CustomChannelListAdapter(Context context) {
        super();
        this.context = context;
    }

    @Override
    public int getCount() {
        if (parse != null) {
            return parse.size();
        }
        return 0;
    }

    @Override
    public Channel getItem(int position) {
        // TODO Auto-generated method stub
        return parse.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

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

        View view = convertView;
        TextView tittle = null;
        TextView desc = null;
        TextView nowPlaying = null;
        if (view == null) {
            LayoutInflater inflater = ((Activity) context)
                    .getLayoutInflater();
            view = inflater.inflate(R.layout.video_listrow, parent, false);

        } else {
            view = convertView;
        }
        tittle = (TextView) view.findViewById(R.id.title);
        desc = (TextView) view.findViewById(R.id.Descp);

        nowPlaying = (TextView) view.findViewById(R.id.NowplayingId);
        if (parse!= null) {

            if (parse.get(position).getName() != null) {
                tittle.setText(parse.get(position).getName()
                        .toString());
            } else {
                tittle.setText("----------------------");
            }

            if (parse.get(position).getDesc() != null) {
                desc.setText(parse.get(position).getDesc()
                        .toString());
            } else {
                desc.setText("------------------------");
            }

        } 
        return view;
    }

}

video_listrow.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="400dp"
    android:layout_height="75dp"
    android:background="@drawable/videolist_selector"
    android:orientation="horizontal"
    android:paddingLeft="5dp"
    android:paddingRight="5dp" >


    <!-- Title Of Song -->

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:textColor="@color/orange"
        android:textSize="18dip"
        android:textStyle="bold"
        android:typeface="sans"
          android:ellipsize="marquee"
        android:freezesText="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:paddingLeft="5dip"
        android:scrollHorizontally="true"
        android:singleLine="true"
        android:text="Tittle Not Found " />

    <!-- Artist Name -->

    <TextView
        android:id="@+id/Descp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:layout_marginTop="1dip"
        android:layout_toRightOf="@+id/thumbnail"
        android:paddingTop="5dp"
        android:textColor="@color/white"
        android:textSize="12dip"
        android:textStyle="bold"
        android:typeface="sans" 
        android:ellipsize="marquee"
        android:freezesText="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:paddingLeft="5dip"
        android:scrollHorizontally="true"
        android:singleLine="true"
        android:text="Description Not Found"
       />

    <!-- Rightend Duration -->
    <!--
         <TextView
        android:id="@+id/duration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@id/title"
        android:gravity="right"
        android:text="5:45"
        android:layout_marginRight="5dip"
        android:textSize="10dip"
        android:textColor="#10bcc9"
        android:textStyle="bold"/>
    -->


    <!-- Rightend Arrow -->
    <!--
        <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/arrow"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"/>
    -->

    <TextView
        android:id="@+id/NowplayingId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="5dp"
        android:layout_marginRight="4dp"
        android:text="Now playing..."
        android:textColor="@color/red"
        android:textSize="12dp" />

</RelativeLayout>

在您的活动代码中

     ListView videoList = (ListView) findviewByid(_);
   CustomChannelListAdapter channelAdapter = new CustomChannelListAdapter(PlasmaView.this);
                videoList.setAdapter(channelAdapter);
于 2013-05-14T12:00:26.810 回答