2

My ListViewAdpter got hardcoding error while compiling with Android studio. This compilation error kept persisting. If i create list of lyrics up to 500 in the ListViewAdapter there won't be hardcoding error except i create up to 700+ then the program won't compile. Please give me the best example of coding safe.

This is the 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();
    }


}
Joseph
  • 400
  • 4
  • 19
  • First, You need learn [Android Data Binding](https://developer.android.com/topic/libraries/data-binding). You can simplify .java code and more use xml layout for shorting code. Second, Maybe, you shall create custom object for Lyrics and make LyricsController class . All logic function write into controller. – HardCoder Feb 02 '20 at 15:20
  • please can you give an example that works with my project – Joseph Feb 02 '20 at 15:24
  • How do I split the function in multiple functions, as a workaround to avoid this 64kb limitations – Joseph Feb 02 '20 at 16:26
  • You need enable Multidex for avoid 64kb function count limit. [How to enable multidexing with the new Android Multidex support library](https://stackoverflow.com/questions/26609734/how-to-enable-multidexing-with-the-new-android-multidex-support-library) – HardCoder Feb 02 '20 at 16:33
  • How do define this in my ListViewAdapter as tutored in the link you provided for me public class Application extends MultiDexApplication { } – Joseph Feb 02 '20 at 19:48
  • @ HardCoder, how do i call for public class Application extends MultiDexApplication in the ListViewAdapter – Joseph Feb 02 '20 at 22:02
  • i still have this error code too large – Joseph Feb 02 '20 at 22:02

0 Answers0