0
好吧,我有一個列表與電影,並有一些圖像,標題,評級,流派和年份在listView中的每一項的一行。現在我試圖按名稱,評分和年份對這些電影進行排序。我按照this tutorial,但我在這裏stucked:如何排序ArrayList降序
@Override
public void onClick(View view) {
if(view.getTag().equals(TAG_SORT_NAME)){
adapter.getItem();
}
if(view.getTag().equals(TAG_SORT_RATING)){
}
if(view.getTag().equals(TAG_SORT_YEAR)){
}
}
我不知道我應該怎麼通過那裏的getItem並在他的教程中,他用碎片,我不是。這裏是我的活動:
public class ListaPreporuka extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener, View.OnClickListener
, SortListener{
// Log tag
private static final String TAG = ListaPreporuka.class.getSimpleName();
// Movies json url
private static final String url = "http://www.nadji-ekipu.org/wp-content/uploads/2015/07/movies.txt";
private ProgressDialog pDialog;
private List<Movie> movieList = new ArrayList<Movie>();
private ListView listView;
private SwipeRefreshLayout swipeRefreshLayout;
private CustomListAdapter adapter;
private static final String TAG_SORT_NAME = "sortName";
private static final String TAG_SORT_RATING = "sortRating";
private static final String TAG_SORT_YEAR = "sortYear";
private static String Year = "year";
private static String Rating = "rating";
private static String Title = "title";
private static String bitmap = "thumbnailUrl";
private static String opis = "opis";
private static String urlMovie = "url";
private MediaPlayer mp_off;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lista_preporuka);
// Toolbabr settings
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);
getSupportActionBar().setLogo(R.drawable.ic_horor_filmovi_ikonica);
Intent newActivity2=new Intent();
setResult(RESULT_OK, newActivity2);
mp_off = MediaPlayer.create(this, R.raw.button_click_off);
final MediaPlayer mp_on = MediaPlayer.create(this, R.raw.button_click_on);
pDialog = new ProgressDialog(this);
// Showing progress dialog before making http request
pDialog.setIcon(R.drawable.ic_horor_filmovi_ikonica);
pDialog.setMessage("Učitavanje...");
pDialog.setCancelable(false);
pDialog.show();
listView = (ListView) findViewById(R.id.list);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
adapter = new CustomListAdapter(this, movieList);
listView.setAdapter(adapter);
swipeRefreshLayout.setOnRefreshListener(this);
/**
* Showing Swipe Refresh animation on activity create
* As animation won't start on onCreate, post runnable is used
*/
swipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(true);
fetchMovies();
}
}
);
if (AppStatus.getInstance(this).isOnline()) {
Log.v("Home", "############################You are online!!!!");
} else {
setContentView(R.layout.no_connection);
Toast t = Toast.makeText(this, "No Internet Connection", Toast.LENGTH_SHORT);
t.show();
Log.v("Home", "############################You are not online!!!!");
}
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String name = ((TextView) view.findViewById(R.id.title))
.getText().toString();
String opisFilma = ((TextView) view.findViewById(R.id.opis))
.getText().toString();
String urlFilm = ((TextView) view.findViewById(R.id.url))
.getText().toString();
String ocena = String.valueOf(movieList.get(position).getRating());
String godina = String.valueOf(movieList.get(position).getYear());
bitmap = ((Movie) movieList.get(position)).getThumbnailUrl();
Intent intent = new Intent(ListaPreporuka.this, MoviesSingleActivity.class);
intent.putExtra(Title, name);
intent.putExtra(opis, opisFilma);
intent.putExtra("images", bitmap);
intent.putExtra(Rating, ocena);
intent.putExtra(Year, godina);
intent.putExtra(urlMovie, urlFilm);
mp_on.start();
startActivity(intent);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
}
});
buildFAB();
}
private void buildFAB(){
// Declare icon for FAB
ImageView icon = new ImageView(this);
icon.setImageResource(R.drawable.ic_halloween);
// Build FAB
FloatingActionButton actionButton = new FloatingActionButton.Builder(this)
.setContentView(icon)
.build();
// Declare icons for SubAction Buttons
ImageView iconSortName = new ImageView(this);
iconSortName.setImageResource(R.drawable.ic_halloween);
ImageView iconSortRating = new ImageView(this);
iconSortRating.setImageResource(R.drawable.ic_halloween);
ImageView iconSortYear = new ImageView(this);
iconSortYear.setImageResource(R.drawable.ic_halloween);
// Set the background for all Sub buttons
SubActionButton.Builder itemBuilder = new SubActionButton.Builder(this);
// Build the Sub Buttons
SubActionButton buttonSortName = itemBuilder.setContentView(iconSortName).build();
SubActionButton buttonSortRating = itemBuilder.setContentView(iconSortRating).build();
SubActionButton buttonSortYear = itemBuilder.setContentView(iconSortYear).build();
buttonSortName.setTag(TAG_SORT_NAME);
buttonSortRating.setTag(TAG_SORT_RATING);
buttonSortYear.setTag(TAG_SORT_YEAR);
buttonSortName.setOnClickListener(this);
buttonSortRating.setOnClickListener(this);
buttonSortYear.setOnClickListener(this);
// add the sub buttons to the main floating action button
FloatingActionMenu actionMenu = new FloatingActionMenu.Builder(this)
.addSubActionView(buttonSortName)
.addSubActionView(buttonSortRating)
.addSubActionView(buttonSortYear)
.attachTo(actionButton)
.build();
}
@Override
public void onRefresh() {
fetchMovies();
}
private void fetchMovies(){
// showing refresh animation before making http call
swipeRefreshLayout.setRefreshing(true);
// Creating volley request obj
JsonArrayRequest movieReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
hidePDialog();
movieList.clear();
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Movie movie = new Movie();
movie.setTitle(obj.getString("title"));
movie.setOpis(obj.getString("opis"));
movie.setThumbnailUrl(obj.getString("image"));
movie.setRating(((Number) obj.get("rating"))
.doubleValue());
movie.setYear(obj.getInt("releaseYear"));
movie.setUrl(obj.getString("url"));
// Genre is json array
final JSONArray genreArry = obj.getJSONArray("genre");
ArrayList<String> genre = new ArrayList<String>();
for (int j = 0; j < genreArry.length(); j++) {
genre.add((String) genreArry.get(j));
}
movie.setGenre(genre);
// adding movie to movies array
movieList.add(movie);
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter.notifyDataSetChanged();
// stopping swipe refresh
swipeRefreshLayout.setRefreshing(false);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
hidePDialog();
// stopping swipe refresh
swipeRefreshLayout.setRefreshing(false);
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(movieReq);
}
@Override
public void onDestroy() {
super.onDestroy();
hidePDialog();
}
private void hidePDialog() {
if (pDialog != null) {
pDialog.dismiss();
pDialog = null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, 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.
if (item.getItemId() == android.R.id.home) {
finish();
mp_off.start();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
return true;
}
return false;
}
@Override
public void onBackPressed() {
super.onBackPressed();
mp_off.start();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
@Override
public void onClick(View view) {
if(view.getTag().equals(TAG_SORT_NAME)){
adapter.getItem();
}
if(view.getTag().equals(TAG_SORT_RATING)){
}
if(view.getTag().equals(TAG_SORT_YEAR)){
}
}
@Override
public void onSortByName() {
}
@Override
public void onSortByRating() {
}
@Override
public void onSortByYear() {
}
}
或者你可以通過定義一個「反向」比較切換比較對象:'return t1.genre.compareTo(movie.genre);' - 這樣你根本不需要'Collections.reverseOrder'。 –
另外我忘了說我需要在這個浮動操作按鈕中實現所有這些。其實在子動作按鈕,我應該通過onClick方法。 –
@DusanDimitrijevic好,然後把你的排序代碼到ie。 'public void onSortByName(){',用'name'字段進行排序。它在UI線程中調用,所以它是安全的。不要忘記在排序後在適配器上調用notifydatasetchanged。 – marcinj