2015-11-18 23 views
-1

我有一個應用程序與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打開/關閉。

你能幫助我,請以正確的方式做到嗎?

回答