package com.think.uiloader.ui;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.think.uiloader.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by borney on 4/28/17.
*/
public class MainActivity extends AppCompatActivity {
private RecyclerView mContentView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContentView = (RecyclerView) findViewById(R.id.recycler);
mContentView.setLayoutManager(new LinearLayoutManager(this));
mContentView.setHasFixedSize(true);
mContentView.addItemDecoration(new ItemDecorationVerticalDivider(this));
mContentView.setAdapter(new MainAdapter(initList()));
}
private List<ListItem<AppCompatActivity>> initList() {
return new ArrayList<ListItem<AppCompatActivity>>() {
{
add(new ListItem(getString(R.string.label_listview), RListViewActivity.class));
add(new ListItem(getString(R.string.label_recyclerview), RRecyclerViewActivity.class));
add(new ListItem(getString(R.string.label_viewgroup), RViewGroupActivity.class));
add(new ListItem(getString(R.string.label_textview), RTextViewActivity.class));
add(new ListItem(getString(R.string.label_webview), RWebViewActivity.class));
add(new ListItem(getString(R.string.label_gridview), RGridViewActivity.class));
add(new ListItem(getString(R.string.label_viewpage), RViewPagerActivity.class));
add(new ListItem(getString(R.string.label_scrollview), RScrollViewActivity.class));
add(new ListItem(getString(R.string.label_otherlibrary), ROtherLibraryActivity.class));
add(new ListItem(getString(R.string.label_notkeephead), RNotKeepHeadActivity.class));
add(new ListItem(getString(R.string.label_keepcontent), RKeepContentActivity.class));
add(new ListItem(getString(R.string.label_autorefresh), RAutoRefreshActivity.class));
add(new ListItem(getString(R.string.label_cannot_move_head_by_tlr), RCannotMoveHeadByTLRActivity.class));
add(new ListItem(getString(R.string.label_refresh_max_move_distance), RRefreshMaxMoveDistanceActivity.class));
add(new ListItem(getString(R.string.label_sunofother), TLRSunofOtherActivity.class));
add(new ListItem(getString(R.string.label_multicontent), TLRMultiContentActivity.class));
add(new ListItem(getString(R.string.label_listview_load), LListViewActivity.class));
add(new ListItem(getString(R.string.label_listview_refresh_load), RLListViewActivity.class));
add(new ListItem(getString(R.string.label_materialstyle), RMaterialHeadActivity.class));
add(new ListItem(getString(R.string.label_materialstyle_keepcontent), RMaterialHeadKeepContentActivity.class));
}
};
}
private class MainAdapter extends RecyclerView.Adapter<MainHolder> {
private List<ListItem<AppCompatActivity>> mItems;
public MainAdapter(List<ListItem<AppCompatActivity>> items) {
mItems = items;
}
@Override
public MainHolder onCreateViewHolder(ViewGroup parent, int viewType) {
TextView view = (TextView) LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.setBackground(getBackground());
}
return new MainHolder(view);
}
@Override
public void onBindViewHolder(MainHolder holder, int position) {
if (position >= 0 && position < getItemCount()) {
if (mItems != null) {
final ListItem<AppCompatActivity> item = mItems.get(position);
holder.itemView.setText(item.name);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
item.start();
}
});
}
}
}
@Override
public int getItemCount() {
return mItems != null ? mItems.size() : 0;
}
private Drawable getBackground() {
int[] itemBackground = new int[]{android.R.attr.selectableItemBackground};
TypedArray a = MainActivity.this.obtainStyledAttributes(itemBackground);
try {
return a.getDrawable(0);
} finally {
a.recycle();
}
}
}
private class MainHolder extends RecyclerView.ViewHolder {
private TextView itemView;
public MainHolder(TextView itemView) {
super(itemView);
this.itemView = itemView;
}
}
private class ListItem<T extends AppCompatActivity> {
private String name;
private Class<T> activityClass;
ListItem(String name) {
this(name, null);
}
ListItem(String name, Class<T> activityClass) {
this.name = name;
this.activityClass = activityClass;
}
void start() {
if (activityClass == null) {
return;
}
Intent intent = new Intent(MainActivity.this, activityClass);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, name + " not support!!!", Toast.LENGTH_LONG).show();
}
}
}
}