Last active
December 17, 2015 16:28
-
-
Save cr5315/d1903a063b4774c729b8 to your computer and use it in GitHub Desktop.
Simple MVP Example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package butzow.me.chan.ui.main; | |
import android.support.design.widget.Snackbar; | |
import android.support.v4.widget.SwipeRefreshLayout; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.support.v7.widget.LinearLayoutManager; | |
import android.support.v7.widget.RecyclerView; | |
import android.support.v7.widget.Toolbar; | |
import com.mikepenz.materialize.MaterializeBuilder; | |
import java.util.List; | |
import butterknife.Bind; | |
import butterknife.ButterKnife; | |
import butzow.me.chan.R; | |
import butzow.me.chan.retrofit.Boards; | |
import timber.log.Timber; | |
public class MainActivity extends AppCompatActivity implements IMainView, SwipeRefreshLayout.OnRefreshListener, MainRecyclerAdapter.Callback { | |
@Bind(R.id.recyclerView) | |
RecyclerView recyclerView; | |
@Bind(R.id.toolbar) | |
Toolbar toolbar; | |
private IMainPresenter presenter; | |
private MainRecyclerAdapter recyclerAdapter; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
ButterKnife.bind(this); | |
setSupportActionBar(toolbar); | |
new MaterializeBuilder(this).build(); | |
recyclerAdapter = new MainRecyclerAdapter(this, this); | |
recyclerView.setLayoutManager(new LinearLayoutManager(this)); | |
recyclerView.setHasFixedSize(true); | |
recyclerView.setAdapter(recyclerAdapter); | |
presenter = new MainPresenter(this); | |
presenter.loadBoards(); | |
} | |
@Override | |
public void displayBoards(List<Boards.Board> boards) { | |
Timber.i("displayBoards()"); | |
recyclerAdapter.updateBoards(boards); | |
} | |
@Override | |
public void displayBoardError(Throwable t, int stringRes) { | |
Timber.i("displayBoardError"); | |
Timber.e(t.toString()); | |
Snackbar.make(findViewById(R.id.coordinatorLayout), stringRes, Snackbar.LENGTH_LONG) | |
.setAction(R.string.action_retry, v -> { | |
presenter.loadBoards(); | |
}).show(); | |
} | |
@Override | |
public void onRefresh() { | |
presenter.loadBoards(); | |
} | |
@Override | |
public void onItemClicked(String board, String title) { | |
startActivity(presenter.getBoardIntent(this, board, title)); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package butzow.me.chan.ui.main; | |
import android.content.Context; | |
import android.content.Intent; | |
import butzow.me.chan.R; | |
import butzow.me.chan.retrofit.Boards; | |
import butzow.me.chan.ui.board.BoardActivity; | |
import retrofit.Callback; | |
import retrofit.Response; | |
import retrofit.Retrofit; | |
import timber.log.Timber; | |
/** | |
* @author cr5315 | |
*/ | |
public class MainPresenter implements IMainPresenter { | |
private IMainView view; | |
public MainPresenter(IMainView view) { | |
this.view = view; | |
} | |
@Override | |
public void loadBoards() { | |
Timber.i("loadBoards()"); | |
Boards.getAdapter().getBoards().enqueue(new Callback<Boards.Boardz>() { | |
@Override | |
public void onResponse(Response<Boards.Boardz> response, Retrofit retrofit) { | |
view.displayBoards(response.body().getBoards()); | |
} | |
@Override | |
public void onFailure(Throwable t) { | |
view.displayBoardError(t, R.string.activity_main_error_loading_boards); | |
} | |
}); | |
} | |
@Override | |
public Intent getBoardIntent(Context context, String board, String title) { | |
Intent intent = new Intent(context, BoardActivity.class); | |
intent.putExtra(BoardActivity.EXTRA_BOARD, board); | |
intent.putExtra(BoardActivity.EXTRA_TITLE, title); | |
return intent; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment