Ich versuche zu implementieren SwipeListView
mit Pull-to-Refresh auf einem ListView
. Es wurde erfolgreich integriert, fügt jedoch einen Eintrag zur Liste hinzu. Listenansicht wird nicht aktualisiert. und kein Gegenstand wurde der Liste hinzugefügt.Android Implementierung SwipeListView mit Pull zu aktualisieren
Ich habe die SwipeListView
von here und Pull implementiert von here zu aktualisieren. Wie kann ich mehr als ein Element in der Listenansicht hinzufügen und die Liste aktualisieren, nachdem das Element hinzugefügt wurde. JAVA-Code
package com.eample.swipelistviewexample;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.fortysevendeg.swipelistview.BaseSwipeListViewListener;
import com.fortysevendeg.swipelistview.PullToRefreshBase;
import com.fortysevendeg.swipelistview.PullToRefreshBase.OnRefreshListener;
import com.fortysevendeg.swipelistview.PullToRefreshBase.OnRefreshListener2;
import com.fortysevendeg.swipelistview.PullToRefreshSwipeListView;
import com.fortysevendeg.swipelistview.SwipeListView;
public class Contact extends Activity {
public PullToRefreshSwipeListView ptorefreshList;
public SwipeListView swipeListView;
ProgressDialog dialog;
private ArrayList<String> mItems;
CategoryAdapter adapter;
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mItems = new ArrayList<String>();
for(int i=0;i<10;i++)
mItems.add("Musethe place "+i);
ptorefreshList=(PullToRefreshSwipeListView) findViewById(R.id.example_list);
swipeListView = ptorefreshList.getRefreshableView();
adapter = new CategoryAdapter(Contact.this,
mItems);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
setListview();
ptorefreshList.setOnRefreshListener(new OnRefreshListener<SwipeListView>() {
@Override
public void onRefresh(PullToRefreshBase<SwipeListView> refreshView) {
// TODO Auto-generated method stub
new NewDataTask().execute();
}
});
}
private void setListview() {
swipeListView.setSwipeListViewListener(new BaseSwipeListViewListener() {
//position di -1 karena sejak gabung library swipelistview + pulltorefresh, position slalu kelebihan 1 & menyebabkan OutOfBound error.
@Override
public void onClickFrontView(final int position) {
//do something here
}
@Override
public void onOpened(int position, boolean toRight) {
// TODO Auto-generated method stub
super.onOpened(position-1, toRight);
}
@Override
public void onMove(int position, float x) {
// TODO Auto-generated method stub
super.onMove(position-1, x);
}
@Override
public int onChangeSwipeMode(int position) {
// TODO Auto-generated method stub
return SwipeListView.SWIPE_MODE_DEFAULT;
}
@Override
public void onStartOpen(int position, int action, boolean right) {
// TODO Auto-generated method stub
super.onStartOpen(position-1, action, right);
}
});
ptorefreshList.setAdapter(adapter);
ptorefreshList.setLongClickable(true);
swipeListView.setSwipeOpenOnLongPress(false);
}
public class CategoryAdapter extends BaseAdapter {
LayoutInflater inflator;
ArrayList<String> category;
public CategoryAdapter(Context context,ArrayList<String> category)
{
inflator=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.category=category;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return category.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int p=position;
View vi=convertView;
if(convertView==null)
vi=inflator.inflate(R.layout.custom_row,null);
TextView tv=(TextView) vi.findViewById(R.id.example_itemname);
tv.setText(category.get(position));
return vi;
}
}
private class NewDataTask extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
if (android.os.Build.VERSION.SDK_INT >= 11) {
dialog = new ProgressDialog(Contact.this,AlertDialog.THEME_HOLO_LIGHT);
} else {
dialog = new ProgressDialog(Contact.this);
}
dialog.setMessage("Loading...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "WWW.MUSETHEPLACE.COM";
}
@Override
protected void onPostExecute(String result) {
// This should be called after refreshing finished
mItems.add(0, result);
adapter = new CategoryAdapter(Contact.this,
mItems);
ptorefreshList.setAdapter(adapter);
adapter.notifyDataSetChanged();
dialog.dismiss();
super.onPostExecute(result);
}
}
public int convertDpToPixel(float dp) {
DisplayMetrics metrics = getResources().getDisplayMetrics();
float px = dp * (metrics.densityDpi/160f);
return (int) px;
}
}