我RecyclerView用来显示包含项目的列表。我想使用这种方法实现搜索,最好以最简单和最有效的方式。我无法理解我在互联网上找到的那些例子,tk。对我来说很难(我还是个初学者)。
项目清单:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textId"
android:padding="@dimen/activity_horizontal_margin"/>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:id="@+id/separator"
android:visibility="visible"
android:background="@color/poloska_spiska"/>
</LinearLayout>
回收器视图适配器:
package com.starikov.definitions.adapters;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.starikov.definitions.MainActivity;
import com.starikov.definitions.R;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
private int[] textId;
public static class ViewHolder extends RecyclerView.ViewHolder{
private LinearLayout mLinearLayout;
public ViewHolder(LinearLayout v){
super(v);
mLinearLayout = v;
}
}
public RecyclerViewAdapter(int[] textId){
this.textId = textId;
}
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LinearLayout cv = (LinearLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.definition, parent, false);
return new ViewHolder(cv);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
float textSize;
LinearLayout linearLayout = holder.mLinearLayout;
TextView textView = linearLayout.findViewById(R.id.textId);
textSize = MainActivity.sharedPreferences.getFloat(MainActivity.APP_PREFERENCES_TEXT_SIZE, 15);
textView.setTextSize(textSize);
textView.setText(linearLayout.getResources().getText(textId[position]));
}
@Override
public int getItemCount() {
return textId.length;
}
}
列表片段RecyclerView:
package com.starikov.definitions;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
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 com.starikov.definitions.adapters.RecyclerViewAdapter;
import com.starikov.definitions.definitions.Geometry;
public class GeometryDefinitionFragment extends Fragment {
private static int themePosition;
private int[] definitionTexts;
int formulaId = 0;
public static void setChoosedTheme(int position){
themePosition = position;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
RecyclerView formulaRecycler = (RecyclerView) inflater.inflate(R.layout.himical_definition_fragment, container, false);
switch (themePosition){
case 0:
definitionTexts = new int[Geometry.ugli.length];
for (int i = 0; i < Geometry.ugli.length; ++i) {
definitionTexts[formulaId] = Geometry.ugli[i].getTextId();
formulaId++;
}
getActivity().setTitle("Углы");
break;
case 1:
definitionTexts = new int[Geometry.parallenie_pryamie.length];
for (int i = 0; i < Geometry.parallenie_pryamie.length; ++i) {
definitionTexts[formulaId] = Geometry.parallenie_pryamie[i].getTextId();
formulaId++;
}
getActivity().setTitle("Параллельные прямые");
break;
case 2:
definitionTexts = new int[Geometry.treugolniki.length];
for (int i = 0; i < Geometry.treugolniki.length; ++i) {
definitionTexts[formulaId] = Geometry.treugolniki[i].getTextId();
formulaId++;
}
getActivity().setTitle("Треугольники");
break;
case 3:
definitionTexts = new int[Geometry.pryamoygolnii_treugolnik.length];
for (int i = 0; i < Geometry.pryamoygolnii_treugolnik.length; ++i) {
definitionTexts[formulaId] = Geometry.pryamoygolnii_treugolnik[i].getTextId();
formulaId++;
}
getActivity().setTitle("Прямоугольный треугольник");
break;
case 4:
definitionTexts = new int[Geometry.gmt.length];
for (int i = 0; i < Geometry.gmt.length; ++i) {
definitionTexts[formulaId] = Geometry.gmt[i].getTextId();
formulaId++;
}
getActivity().setTitle("Геометрические места точек");
break;
case 5:
definitionTexts = new int[Geometry.gomotetia.length];
for (int i = 0; i < Geometry.gomotetia.length; ++i) {
definitionTexts[formulaId] = Geometry.gomotetia[i].getTextId();
formulaId++;
}
getActivity().setTitle("Геометрические места точек");
break;
case 6:
definitionTexts = new int[Geometry.chetirehugolnik.length];
for (int i = 0; i < Geometry.chetirehugolnik.length; ++i) {
definitionTexts[formulaId] = Geometry.chetirehugolnik[i].getTextId();
formulaId++;
}
getActivity().setTitle("Четырехугольники");
break;
}
RecyclerViewAdapter adapter = new RecyclerViewAdapter(definitionTexts);
formulaRecycler.setAdapter(adapter);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
formulaRecycler.setLayoutManager(layoutManager);
return formulaRecycler;
}
@Override
public void onResume() {
super.onResume();
MainActivity.lastOpenedFragment = new GeometryDefinitionFragment();
MainActivity.genometryDefinitionFrag = true;
}
@Override
public void onPause() {
super.onPause();
MainActivity.genometryDefinitionFrag = false;
}
}
在其中,我从前一个片段中获取 id,并且对于每个 id,我用不同的元素填充列表。
几何类
package com.starikov.definitions.definitions;
import com.starikov.definitions.R;
public class Geometry {
private int textId;
public static final Geometry[] ugli = {
new Geometry(R.string.ugol),
new Geometry(R.string.razvernutii_ugol),
new Geometry(R.string.pryamim_uglom),
new Geometry(R.string.ostrim),
new Geometry(R.string.tupim),
new Geometry(R.string.smejnie),
new Geometry(R.string.gradus),
new Geometry(R.string.ravnimi),
new Geometry(R.string.bissektrisa),
new Geometry(R.string.vertical),
new Geometry(R.string.uglom_mejdu_dvumya_peresekauch_praymamim),
new Geometry(R.string.perpendikular),
};
public static final Geometry[] parallenie_pryamie = {
new Geometry(R.string.parallelnie_pryamie),
new Geometry(R.string.teorema_suh_paral_pryamih),
new Geometry(R.string.aksioma_paral_pryamih),
new Geometry(R.string.sledstvie),
new Geometry(R.string.parallelnie_pryamie_ugli),
new Geometry(R.string.priznaki_parallelnosti_dvuh_prymih),
new Geometry(R.string.svoistva_uglov_paral_pr),
new Geometry(R.string.teorema_faleca),
new Geometry(R.string.rashrir_faleca),
};
public static final Geometry[] treugolniki = {
new Geometry(R.string.treugolnik),
new Geometry(R.string.uglom_treugolnika),
new Geometry(R.string.vidi_treugolnikov),
new Geometry(R.string.perimetr),
new Geometry(R.string.sootnoshenie_ejdu_storonami_i_uglami_treugolnika),
new Geometry(R.string.vneshnim),
new Geometry(R.string.ravnimi__),
new Geometry(R.string.priznaki_ravenstva_treugolnikov),
new Geometry(R.string.srednyaya_linia),
new Geometry(R.string.mediana),
new Geometry(R.string.bissektrisa__),
new Geometry(R.string.visota),
new Geometry(R.string.svoistvo_srednei_linii_treugolnika),
new Geometry(R.string.bissektrisa_ravnobedr),
new Geometry(R.string.chetire_zamechatelnie_tochki_treugolnika),
new Geometry(R.string.svoistva_median_treugolnika),
new Geometry(R.string.reshit_treugolnik),
};
public static final Geometry[] pryamoygolnii_treugolnik = {
new Geometry(R.string.pryamougolnii_treugolnik),
new Geometry(R.string.gipotenuza),
new Geometry(R.string.kateti),
new Geometry(R.string.swoistvo_mediani_provedennoi_na_gipotenuzu),
new Geometry(R.string.priznaki_ravenstva_pryamougolnih_treugolnikov),
new Geometry(R.string.v_pryamougolnom_treugolnike),
new Geometry(R.string.teorema_pifagora),
new Geometry(R.string.obratnaya_teorema_pifagora),
new Geometry(R.string.teorema_kosinusov),
new Geometry(R.string.teorema_sinusov),
};
public static final Geometry[] gmt = {
new Geometry(R.string.gmt),
new Geometry(R.string.okrujnost),
new Geometry(R.string.seredinnii_perpendikular),
new Geometry(R.string.sovokupnost_dvuh_pryamih_parallelnoih_dannoi),
new Geometry(R.string.parallelnaya_im_pruyamaya),
new Geometry(R.string.sovokupnost_dvuh_pryamih),
new Geometry(R.string.sovokupnost_dvuh_segmentov_bez_ih_konsov),
};
public static final Geometry[] gomotetia = {
new Geometry(R.string.gomotetia),
new Geometry(R.string.preobrazovanie_podobia),
new Geometry(R.string.podobnimi),
new Geometry(R.string.sushestvovanie_podobnih_treugolnikov),
new Geometry(R.string.svoistvo_preobrazovania_podobia),
new Geometry(R.string.priznaki_podobia_treugolnikov),
new Geometry(R.string.v_podobnih_treugolnikah),
};
public static final Geometry[] chetirehugolnik = {
new Geometry(R.string.chetirehugolnik),
new Geometry(R.string.vershini_i_storoni),
new Geometry(R.string.sosednie_protivoleshahie),
new Geometry(R.string.sosednie_smejnie),
new Geometry(R.string.diagonal),
new Geometry(R.string.vipuklim),
new Geometry(R.string.uglom),
new Geometry(R.string.sosednie_protivoleshahie_ugli),
new Geometry(R.string.svoistvo_uglov_vipuklogo_chetirehugolnika),
new Geometry(R.string.perimetr___),
new Geometry(R.string.svoistva_parallelograma),
new Geometry(R.string.priznaki_parallelograma),
new Geometry(R.string.pryamougolnik),
new Geometry(R.string.svoistva_pryamougolnika),
new Geometry(R.string.priaznaki_pryamougolnika),
new Geometry(R.string.romb),
new Geometry(R.string.svoistva_romba),
new Geometry(R.string.prizanki_romba),
new Geometry(R.string.kvadrat),
new Geometry(R.string.svoistva_kvadrata),
new Geometry(R.string.prizmnaki_kvadrata),
new Geometry(R.string.eche_dva_prianaka_kvadrata),
new Geometry(R.string.trapecia),
new Geometry(R.string.osnovanie_trapecii),
new Geometry(R.string.srednyaya_linia_trapecii),
new Geometry(R.string.diagonal_trapecii),
new Geometry(R.string.visota_trapecii),
new Geometry(R.string.svoistva_trapecii),
new Geometry(R.string.ravnobokoi_rapeciei),
new Geometry(R.string.pryamougolnoi_trapeciei),
new Geometry(R.string.svoistva_ravnobokoi_trapecii),
};
private Geometry(int textId){
this.textId = textId;
}
public int getTextId(){
return textId;
}
}
我寻求帮助,因为 我自己没有弄清楚。
明白了,做了:
activity_main.xml
这是 RecyclerView 的布局
android:scrollbarThumbVertical="@drawable/scrollview_thumb" 和
android:scrollbarTrackVertical="@drawable/vertical_scrollview_track"
是我的自定义滚动条布局(可以删除或替换为您自己的)
主要活动
main_menu.xml
公式.java
card_view.xml(列表项的布局)
RecyclerViewAdapter.java
在 CardView 和 RecyclerView 的 Gradle 依赖项中
我很高兴获得有关如何改进代码的建议!
我这样做:searchView。片段本身。如果没有找到,那么我会显示带有铭文的视图文本 - 未找到。
我在适配器中注册了这个方法: