簡體   English   中英

使用pasrequery的ListView的自定義適配器

[英]Custom adapter for listview using pasrequery

我正在嘗試創建一個演示應用程序,在該應用程序中,用戶輸入搜索和目的地,將從parse.com查詢數據,然后將匹配結果顯示在下一個屏幕的列表視圖中。 我已經按照一些教程進行了學習,但是可以肯定的是,還沒有足夠具體地理解這個概念。 輸入搜索查詢時,將顯示進度條,然后該應用程序返回到上一個活動。 我不明白哪里出了問題。

這是我的mainactivity班。

public class CarpoolingActivitySearch extends ActionBarActivity {

ListView listView;
ArrayList<Travellers> travellers;
CarpoolingAdapter adapter;
protected ProgressDialog proDialog;


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


    final EditText mSrc = (EditText)findViewById(R.id.carpooling_source);
    final EditText mDst = (EditText)findViewById(R.id.destination);

    Button mSubmitButton = (Button)findViewById(R.id.carpooling_submit);
    mSubmitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String source = mSrc.getEditableText().toString();
            String destination = mDst.getEditableText().toString();

            listView = (ListView) findViewById(R.id.list);

            ParseQuery<ParseObject> query = ParseQuery.getQuery("Carpooling");
            query.whereEqualTo("Source", source); //assume you have a DonAcc column in your Country table
            query.whereEqualTo("Destination", destination); //assume you have a DonAcc column in your Country table

            startLoading();
            query.findInBackground(new FindCallback<ParseObject>() {
                @Override
                public void done(List<ParseObject> parseObjects, ParseException e) {
                   if(e==null)
                   {
                      for(int i=0;i<parseObjects.size();i++)
                       {
                           Travellers travellers1 =  new Travellers();
                           travellers1.setSource("Source");
                           travellers1.setDestination("Destination");

                           travellers.add(travellers1);
                           if(travellers.size() > 0)
                           {
                               adapter = new CarpoolingAdapter(getApplicationContext(),R.layout.activity_carpooling_activity_search,travellers);
                               listView.setAdapter(adapter);
                   } else {


                               AlertDialog.Builder popup = new AlertDialog.Builder(CarpoolingActivitySearch.this);
                               popup.setMessage("Seems our servers are busy. Try again in some time.");
                               popup.setPositiveButton("Back",null);

                               AlertDialog dialog = popup.create();
                               dialog.show();

                           }
                        }

                     stopLoading();
                       finish();
                   }
                   else {
                       stopLoading();
                       AlertDialog.Builder popup = new AlertDialog.Builder(CarpoolingActivitySearch.this);
                       popup.setMessage(e.getMessage());
                       popup.setPositiveButton("Back",null);

                       AlertDialog dialog = popup.create();
                       dialog.show();



                   }
                }
            });
        }
    });

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_carpooling_activity_search, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
protected void startLoading() {
    proDialog = new ProgressDialog(this);
    proDialog.setMessage("loading...");
    proDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    proDialog.setCancelable(false);
    proDialog.show();
}

protected void stopLoading() {
    proDialog.dismiss();
    proDialog = null;
  }
}

為此,我創建了一個自定義適配器。

public class CarpoolingAdapter extends ArrayAdapter<Travellers> {
ArrayList<Travellers> travellersArrayList;
LayoutInflater vi;
int Resource;
ViewHolder holder;
Context context;

public CarpoolingAdapter(Context context, int resource, ArrayList<Travellers> objects) {
    super(context, resource, objects);
    vi = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Resource = resource;
    travellersArrayList = objects;
    this.context = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView== null) {
        convertView = vi.inflate(Resource,null);
        holder = new ViewHolder();
        holder.mSource = (TextView)convertView.findViewById(R.id.textView);
        holder.mDestination = (TextView)convertView.findViewById(R.id.textView2);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder)convertView.getTag();
    }
    holder.mSource.setText(travellersArrayList.get(position).getSource());
    holder.mDestination.setText(travellersArrayList.get(position).getDestination());

    return convertView;
}

static class ViewHolder {
    public TextView mSource;
    public TextView mDestination;

 }
}

旅行者類具有默認構造函數和getter / setter方法。

  public class Travellers {

private String Source;


private String Destination;

public Travellers() {

}

public Travellers(String source, String destination) {
    super();
    Source = source;
    Destination = destination;
}


public String getSource() {
    return Source;
}

public void setSource(String source) {
    Source = source;
}

public String getDestination() {
    return Destination;
}

public void setDestination(String destination) {
    Destination = destination;
 }

}

主布局文件名為activity_carpooling_activity_search.xml。

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.android.myapplication.Carpooling.Carpooling">

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/carpooling_source"
    android:hint="Source"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/destination"
    android:hint="Destination"
    android:layout_below="@+id/carpooling_source"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="86dp" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Submit"
    android:id="@+id/carpooling_submit"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<ScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/scrollView"
    android:layout_toEndOf="@+id/carpooling_submit"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/carpooling_submit">

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/list" />
  </ScrollView>
</RelativeLayout>

最后是我的list_item_deatil.xml文件。

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">

<TextView
    android:layout_width="174dp"
    android:layout_height="wrap_content"
    android:text="New Text"
    android:id="@+id/textView"
    android:layout_weight="0.13" />

<TextView
    android:layout_width="245dp"
    android:layout_height="wrap_content"
    android:text="New Text"
    android:id="@+id/textView2"
    android:layout_weight="0.13" />
 </LinearLayout>

我應該修改什么才能使其正常工作? 我沒有得到任何這樣的錯誤。

首先,您發布了一個很長的代碼塊,其中的縮進不足以讀取您的代碼。 因此,據我了解,您的ParseException e為null,這意味着沒有異常。 在該if塊內部,在for循環之后for您正在調用finish() ,這導致當前活動實例被破壞,從而轉到上一個活動。 我希望這可以幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM