DoYouKnow Энциклопедия / Уроки 7

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;


import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast;

import com.neco_desarrollo.doyouknow.adapter.DataAdapter;
import com.neco_desarrollo.doyouknow.adapter.ListItem;
import com.neco_desarrollo.doyouknow.adapter.RecOnClickListener;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity implements NavItemSelectedListener {
private RecOnClickListener recOnClickListener;
private DataAdapter adapter;
private List<ListItem> listData;
private RecyclerView rcView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupMenu();
setRecOnClickListener();
init();


}
private void setupMenu() {
FragmentManager fm = getSupportFragmentManager();
MenuFragmentList mMenuFragment = (MenuFragmentList) fm.findFragmentById(R.id.id_container_menu);
if (mMenuFragment == null) {
mMenuFragment = new MenuFragmentList();
mMenuFragment.setNavItemSelectedListener(this);
fm.beginTransaction().add(R.id.id_container_menu, mMenuFragment).commit();
}
}


@Override
public void onNavItemSelectedListener(MenuItem item) {
//Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
switch (item.getItemId())
{
case R.id.id_favorite:

break;
case R.id.id_planets:

updateMainList(getResources().getStringArray(R.array.planets));
break;
case R.id.id_stars:
updateMainList(getResources().getStringArray(R.array.stars));
break;
case R.id.id_travel:

break;
case R.id.id_universal:

break;
case R.id.id_smart:

break;
case R.id.id_filosof:

break;
case R.id.id_umor:

break;
case R.id.id_ufo:

break;
case R.id.id_spirits:

break;

}
}
private void updateMainList(String[] array)
{
List<ListItem> list = new ArrayList<>();
for(int i = 0; i < array.length; i++)
{
ListItem item = new ListItem();
item.setText(array[i]);
item.setFavorite(false);
list.add(item);
}

adapter.updateList(list);
}
private void init()
{
rcView = findViewById(R.id.rcView);
rcView.setLayoutManager(new LinearLayoutManager(this));
listData = new ArrayList<>();
String[] planetsArray = getResources().getStringArray(R.array.planets);

for(int i = 0; i < planetsArray.length; i++)
{
ListItem item = new ListItem();
item.setText(planetsArray[i]);
item.setFavorite(false);
listData.add(item);
}
adapter = new DataAdapter(this,recOnClickListener,listData);
rcView.setAdapter(adapter);



}
private void setRecOnClickListener()
{
recOnClickListener = new RecOnClickListener() {
@Override
public void onItemClicked(int pos) {
Toast.makeText(MainActivity.this, "POsition = " + pos, Toast.LENGTH_SHORT).show();
}
};
}

}

ListItem.java


public class ListItem {
private String text;
private boolean favorite;

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

public boolean isFavorite() {
return favorite;
}

public void setFavorite(boolean favorite) {
this.favorite = favorite;
}
}

MenuFragmentLIst.java

import android.graphics.Typeface;
import android.os.Bundle;

import android.text.Spannable;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.google.android.material.navigation.NavigationView;

/**
* Created by mxn on 2016/12/13.
* MenuListFragment
*/

public class MenuFragmentList extends Fragment {
private NavItemSelectedListener navItemSelectedListener;



@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_menu, container,
false);

NavigationView vNavigation = view.findViewById(R.id.vNavigation);
vNavigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
//Toast.makeText(getActivity(), menuItem.getTitle(), Toast.LENGTH_SHORT).show();
navItemSelectedListener.onNavItemSelectedListener(menuItem);

return false;
}
});

Menu m = vNavigation.getMenu();
for (int i=0;i<m.size();i++) {
MenuItem mi = m.getItem(i);

//for aapplying a font to subMenu ...
SubMenu subMenu = mi.getSubMenu();
if (subMenu!=null && subMenu.size() > 0 ) {
for (int j=0; j <subMenu.size();j++) {
MenuItem subMenuItem = subMenu.getItem(j);
applyFontToMenuItem(subMenuItem);
}
}

//the method we have create in activity
applyFontToMenuItem(mi);
}



return view;
}

private void applyFontToMenuItem(MenuItem mi) {
if (getActivity() != null) {
Typeface font = Typeface.createFromAsset(getActivity().getAssets(), getString(R.string.font2));
SpannableString mNewTitle = new SpannableString(mi.getTitle());
mNewTitle.setSpan(new CustomTypeFaceSpan("", font), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
mi.setTitle(mNewTitle);
}
}

public void setNavItemSelectedListener(NavItemSelectedListener navItemSelectedListener) {
this.navItemSelectedListener = navItemSelectedListener;
}
}

NavItemSelectedListener.java

import android.view.MenuItem;

public interface NavItemSelectedListener {
public void onNavItemSelectedListener(MenuItem item);
}

CustomTypeFaceSpan.java

import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;

public class CustomTypeFaceSpan extends TypefaceSpan {

private final Typeface newType;

public CustomTypeFaceSpan(String family, Typeface type) {
super(family);
newType = type;
}

@Override
public void updateDrawState(TextPaint ds) {
applyCustomTypeFace(ds, newType);
}

@Override
public void updateMeasureState(TextPaint paint) {
applyCustomTypeFace(paint, newType);
}

private static void applyCustomTypeFace(Paint paint, Typeface tf) {
int oldStyle;
Typeface old = paint.getTypeface();
if (old == null) {
oldStyle = 0;
} else {
oldStyle = old.getStyle();
}

int fake = oldStyle & ~tf.getStyle();
if ((fake & Typeface.BOLD) != 0) {
paint.setFakeBoldText(true);
}

if ((fake & Typeface.ITALIC) != 0) {
paint.setTextSkewX(-0.25f);
}

paint.setTypeface(tf);
}
}

DataAdapter.java

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.neco_desarrollo.doyouknow.R;

import java.util.List;

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.DataHolder> {
private Context context;
private RecOnClickListener recOnClickListener;
private List<ListItem> listItemArray;

public DataAdapter(Context context, RecOnClickListener recOnClickListener, List<ListItem> listItemArray) {
this.context = context;
this.recOnClickListener = recOnClickListener;
this.listItemArray = listItemArray;

}

@NonNull
@Override
public DataHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout,parent,false);
return new DataHolder(view);
}

@Override
public void onBindViewHolder(@NonNull DataHolder holder, int position) {
holder.setData(listItemArray.get(position));
}

@Override
public int getItemCount() {
return listItemArray.size();
}

public class DataHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private TextView tvText;
private ImageButton imButFav;

public DataHolder(@NonNull View itemView) {
super(itemView);
tvText = itemView.findViewById(R.id.tvText);
imButFav = itemView.findViewById(R.id.imBut);
itemView.setOnClickListener(this);



}
public void setData(ListItem item)
{
tvText.setText(item.getText());
}

@Override
public void onClick(View v) {
recOnClickListener.onItemClicked(getAdapterPosition());
}
}

public void updateList(List<ListItem> listArray)
{
listItemArray.clear();
listItemArray.addAll(listArray);
notifyDataSetChanged();
}
}

RecOnClickListener.java


public interface RecOnClickListener {
public void onItemClicked(int pos);
}

space.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="planets">
<item>Самой горячей из планет системы является Венера.
Она дальше от Солнца, чем Меркурий, но из-за невероятно
плотной атмосферы, возле поверхности становящейся
практически жидкой из-за чудовищного давления,
температура возле её поверхности превышает 460 градусов.
Это выше, чем температура плавления свинца.
А ещё там идут дожди из серной кислоты, но из-за жара
они не долетают до поверхности, испаряясь ещё в атмосфере.</item>
<item>Как Земля вращается вокруг Солнца, так и Солнечная система
вращается вокруг центра Галактики, причём она движется со
скоростью в 220-240 километров в секунду.</item>
<item>Между Землёй и Луной поместились бы все остальные
планеты Солнечной системы.</item>
<item>Кольца есть не только у Сатурна, но и у всех
остальных планет-гигантов — Юпитер, Урана и Нептуна.</item>
<item>Среди всех планет Солнечной системы наименее изучены
Уран и Нептун, а больше остальных изучен Марс
(см. интересные факты о Марсе).</item>
</string-array>
<string-array name="stars">
<item>В наблюдаемой Вселенной двойных звёзд больше,
чем одиночных. Есть и тройные.</item>
<item>Самая «многочисленная» известная звёздная
система насчитывает шесть звёзд.</item>
<item>Плотность нейтронной звезды сопоставима
с плотностью атомного ядра.</item>
<item>Радиус нейтронных звёзд редко превышает 50 километров, а обычно составляет
не более 15-20 километров, однако, их масса в
таком случае сопоставима с массой Солнца.</item>
<item>Пульсары — особый тип нейтронных звёзд, вращающийся вокруг
своей оси со скоростью до пятисот-семисот оборотов в секунду.</item>
</string-array>
<string-array name="travels">
<item>sdfgsdfgsdfsdfsdfsadf</item>
<item>xfghxfghxfghxfghfgh</item>
<item>xfghxfghxfghfth</item>
<item>dytjdtyj</item>
<item>fuyjftyj</item>
</string-array>
<string-array name="universal">
<item>Космос состоит из молекул водорода, которые поэтично
называют межзвездным веществом, космических лучей и
электромагнитного излучения.</item>
<item>Вокруг Земли вращается более 8 тысяч
единиц космического мусора.</item>
<item>Луч света от Солнца до Земли добирается всего за 8 минут,
но фотону требуются сотни тысяч лет,
чтобы добраться от ядра звезды к его поверхности.</item>
<item>99% массы Солнечной системы составляет масса Солнца.</item>
<item>В космосе нет звуков, так как нет воздуха, в котором
распространялись бы звуковые волны.</item>
</string-array>

</resources>

drawer_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<item android:title="@string/favorite" android:id="@+id/id_favorite"/>
<item android:title="@string/cosmo">
<menu>
<item android:title="@string/planet"
android:id="@+id/id_planets"

/>
<item android:title="@string/stars"
android:id="@+id/id_stars"/>
<item android:title="@string/travel"
android:id="@+id/id_travel"
/>
<item android:title="@string/universal"
android:id="@+id/id_universal"/>
</menu>
</item>
<item android:title="@string/words">
<menu>
<item android:title="@string/smart"
android:id="@+id/id_smart"
/>
<item android:title="@string/filosof"
android:id="@+id/id_filosof"/>
<item android:title="@string/umor"
android:id="@+id/id_umor"
/>
</menu>
</item>
<item android:title="@string/unusual">
<menu>
<item android:title="@string/ufo"
android:id="@+id/id_ufo"
/>
<item android:title="@string/spirits"
android:id="@+id/id_spirits"/>

</menu>
</item>
</menu>

Добавить комментарий

Ваш адрес email не будет опубликован.