Как грамотно запрограммировать мое приложение с помощью ListView без проблем с жестким кодом - PullRequest
1 голос
/ 02 февраля 2020

Мой ListViewAdpter получил ошибку жесткого кодирования при компиляции с Android studio. Эта ошибка компиляции сохранялась. Если я создаю список лирики до 500 в ListViewAdapter, то не будет ошибки жесткого кода, за исключением того, что я создаю до 700+, тогда программа не будет компилироваться. Пожалуйста, дайте мне лучший пример безопасного кодирования.

Это ListViewAdapter

public class ListViewAdapter extends BaseAdapter{

    //Variables
    Context mContext;
    LayoutInflater inflater;
    List<Model> modellist;
    ArrayList<Model> arrayList;

    //Constructor
    public ListViewAdapter(Context context, List<Model> modellist) {
        mContext = context;
        this.modellist = modellist;
        inflater = LayoutInflater.from(mContext);
        this.arrayList = new ArrayList<Model>();
        this.arrayList.addAll(modellist);
    }

    public class ViewHolder{
        TextView mTitleTv, mDescTv;
        ImageView mIconTv;
    }

    @Override
    public int getCount() {
        return modellist.size();
    }

    @Override
    public Object getItem(int i) {
        return modellist.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View view, ViewGroup parent) {
        final ViewHolder holder;
        if (view==null){
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.row, null);

            //locate the views in row.xml
            holder.mTitleTv = (TextView) view.findViewById(R.id.mainTitle);
            holder.mDescTv = (TextView) view.findViewById(R.id.mainDesc);
            holder.mIconTv = view.findViewById(R.id.mainIcon);

            view.setTag(holder);
        }
        else {
            holder = (ViewHolder)view.getTag();
        }
        //set the result into textview
        holder.mTitleTv.setText(modellist.get(i).getTitle());
        holder.mDescTv.setText(modellist.get(i).getDesc());
        //Set the result in imagview
        holder.mIconTv.setImageResource(modellist.get(i).getIcon());

        //listview item clicks
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //code later
                if (modellist.get(i).getTitle().equals("Song 001 | This song lyrics 1")){
                    //start NewActivity with title for actionbar and text for textview
                    Intent intent =  new Intent(mContext, FavouritesContentActivity.class);
                    intent.putExtra("actionBarTitle", "Song 001");
                    intent.putExtra("contentTv", "This is song lyrics detail\n\n\n\n");
                    mContext.startActivity(intent);
                } if (modellist.get(i).getTitle().equals("Song 001 | This song lyrics 2")){
                    //start NewActivity with title for actionbar and text for textview
                    Intent intent =  new Intent(mContext, FavouritesContentActivity.class);
                    intent.putExtra("actionBarTitle", "Song 002");
                    intent.putExtra("contentTv", "This is song lyrics detail\n\n\n\n");
                    mContext.startActivity(intent);
                } if (modellist.get(i).getTitle().equals("Song 001 | This song lyrics 3")){
                    //start NewActivity with title for actionbar and text for textview
                    Intent intent =  new Intent(mContext, FavouritesContentActivity.class);
                    intent.putExtra("actionBarTitle", "Song 003");
                    intent.putExtra("contentTv", "This is song lyrics detail\n\n\n\n");
                    mContext.startActivity(intent);
                } if (modellist.get(i).getTitle().equals("Song 001 | This song lyrics 4")){
                    //start NewActivity with title for actionbar and text for textview
                    Intent intent =  new Intent(mContext, FavouritesContentActivity.class);
                    intent.putExtra("actionBarTitle", "Song 004");
                    intent.putExtra("contentTv", "This is song lyrics detail\n\n\n\n");
                    mContext.startActivity(intent);
                } if (modellist.get(i).getTitle().equals("Song 001 | This song lyrics 5")){
                    //start NewActivity with title for actionbar and text for textview
                    Intent intent =  new Intent(mContext, FavouritesContentActivity.class);
                    intent.putExtra("actionBarTitle", "Song 005");
                    intent.putExtra("contentTv", "This is song lyrics detail\n\n\n\n");
                    mContext.startActivity(intent);
                } if (modellist.get(i).getTitle().equals("Song 001 | This song lyrics 6")){
                    //start NewActivity with title for actionbar and text for textview
                    Intent intent =  new Intent(mContext, FavouritesContentActivity.class);
                    intent.putExtra("actionBarTitle", "Song 006");
                    intent.putExtra("contentTv", "This is song lyrics detail\n\n\n\n");
                    mContext.startActivity(intent);
                } if (modellist.get(i).getTitle().equals("Song 001 | This song lyrics 7")){
                    //start NewActivity with title for actionbar and text for textview
                    Intent intent =  new Intent(mContext, FavouritesContentActivity.class);
                    intent.putExtra("actionBarTitle", "Song 007");
                    intent.putExtra("contentTv", "This is song lyrics detail\n\n\n\n");
                    mContext.startActivity(intent);
                }
//etc... up to 900 lyrics

            }
        });


        return view;
    }

    //filter
    public void filter(String charText){
        charText = charText.toLowerCase(Locale.getDefault());
        modellist.clear();
        if (charText.length()==0){
            modellist.addAll(arrayList);
        }
        else {
            for (Model model : arrayList){
                if (model.getTitle().toLowerCase(Locale.getDefault()).contains(charText)){
                    modellist.add(model);
                }
            }
        }
        notifyDataSetChanged();
    }


}
...