可以使用MultidexApplication解决代码太大错误

时间:2020-02-03 06:40:08

标签: java android adapter

我有一个正在投放的ListView android项目。我已经在ListViewAdapter中对歌词进行了硬编码,并且更改它似乎需要很多工作。我想增加歌词,但由于硬编码而遇到“ 编码太大错误”。我想将其中的歌词从现有的700歌词增加到ListViewAdapter中的900歌词。是否有一种变通办法,可以使用 MultidexApplication 增强64kb的限制?

这是我的代码

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


}

模型类

public class Model {

    String title;
    String desc;
    int icon;

    //constructor
    public Model(String title, String desc, int icon) {
        this.title = title;
        this.desc = desc;
        this.icon = icon;
    }

    //getters


    public String getTitle() {
        return this.title;
    }

    public String getDesc() {
        return this.desc;
    }

    public int getIcon() {
        return this.icon;
    }
}

1 个答案:

答案 0 :(得分:0)

减少代码的一种方法是 创建一个单独的方法

public openFavContent(String title, String lyrics){
Intent intent =  new Intent(mContext, FavouritesContentActivity.class);
                    intent.putExtra("actionBarTitle", title);
                    intent.putExtra("contentTv", lyrics);
                    mContext.startActivity(intent);
    }

并在每种情况下调用此方法。

这只会减少重复的代码行。

还要在模型课中,分别输入标题和歌词。

并基于位置单击,从列表中获取模型,并从该模型获取标题和歌词,然后传递openFavContent()。

这样,您不必每次都比较标题。