我有一個應用程序與listFragments,我想顯示數據從領域進入他們porper的方式。 比如我有用戶大量DATAS的(名字,最喜歡的運動等)如何在Android的ListFragment中顯示Realm對象?
用戶等級:
public class User extends RealmObject {
@PrimaryKey
private long id;
private String firstName;
private String lastName;
private String email;
private RealmList<UserSport> sports = new RealmList<>();
private RealmList<User> friends= new RealmList<>();
private RealmList<User> sportmates= new RealmList<>();
{and some other, and getters and setters}
}
用戶可以選擇「用戶」菜單,其中有3個ListFragments在不同的標籤(朋友,Sportmates,其他)
朋友片段:從baseadapter延伸(並實現FILT
public class FriendsFragment extends ListFragment {
List<User> users;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.my_team, container, false);
users=new ArrayList<>();
long userid=/*The currently logged in users id.*/
Realm realm = Realm.getInstance(getContext());
users.addAll(realm.where(User.class).equalTo("id",userid).findFirst().getFriends());
MySportmateListAdapter adapter = new MySportmateListAdapter(getContext(), users);
setListAdapter(adapter);
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final ListView listView = getListView();
final SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_layout);
// swipeRefreshLayout.setOnRefreshListener();
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
//TODO implement
});
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int topRowVerticalPosition = (listView == null || listView.getChildCount() == 0) ? 0 : listView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(firstVisibleItem == 0 && topRowVerticalPosition >= 0);
}
});
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Toast.makeText(getContext(), "Here is " + position + ". item " + v.getTag(), Toast.LENGTH_LONG).show();
}
MyListAdapter erable,但對於它的其他用途,因此現在時並不需要):
package teammeup.com.teammeup.ListAdapters;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import retrofit.Call;
import retrofit.JacksonConverterFactory;
import retrofit.Retrofit;
import teammeup.com.teammeup.API.RestService;
import teammeup.com.teammeup.R;
import teammeup.com.teammeup.domain.User;
public class MySportmateListAdapter extends BaseAdapter implements Filterable {
Context context;
List<User> users;
ListFragment parentFragment;
public MySportmateListAdapter(Context context, List<User> users) {
super();
this.context = context;
this.users = users;
}
/*This is for the other usage!*/
public MySportmateListAdapter(Context context, ListFragment fragment) {
super();
this.context = context;
parentFragment=fragment;
}
@Override
public int getCount() {
return users.size();
}
@Override
public Object getItem(int position) {
return users.get(position);
}
@Override
public long getItemId(int position) {
return users.indexOf(getItem(position));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.user_on_list, parent, false);
}
User user = users.get(position);
/*Here are some textviews and other for a custom layout... and I sett hem with the datas from the user.*/
convertView.setTag(user.getId());
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
/*For other usage, so it not neccessary now*/
return filter;
}
}
所以我的問題是,我想使用該適配器爲Sportmates和其他碎片,這幾乎相同,但數據不同。在這種情況下,我想我必須將數據從ListFragments傳遞給適配器。
我的問題是,如何處理porper方式的領域?在哪裏打開/關閉它?我在菜單上有一個註銷選項,我想刪除所有數據(整個Realm)。
我認爲onResume/onPause打開/關閉不起作用,因爲註銷。
我使用slidingtablayout作爲選項卡,如果我是正確的,它會準備打開片段附近的fragmnets,所以還有1個原因針對onResume/onPause打開/關閉。
你能幫助我,請以正確的方式做到嗎?