2014-01-24 6 views
1

В моем приложении у меня есть список, содержащий сотни или строки. Это настраиваемый список с двумя текстовыми изображениями (описание &).Эффективный способ хранения большого количества строк в приложении android

В настоящее время у меня есть два строковых массива в strings.xml. Тот, который хранит все заголовки для списка и другого массива, в котором хранятся все описания для lsitview. Когда создается список, я заполняю listviews заголовком и описанием из каждого массива строк.

Проблема в том, что становится трудно управлять так много строк.

Было бы здорово, если бы кто-нибудь мог предложить любой другой эффективный способ достичь этого.

Причина, по которой я использую строки, состоит в том, что у нас есть очень похожие другие проекты, которые нужно делать дальше, где даже некоторые не-программисты могут заменить значения массива строк для нас. Вот почему мы не используем sqlite.

<string-array name="Headings"> 
    <item>Heading1</item> 
    <item>Heading2</item> 
    . 
    . 
</string-array> 

<string-array name="Desc"> 
    <item>Desc1</item> 
    <item>Desc2</item> 
    . 
    . 
</string-array> 



.java file 

List<RowItem> rowItems= new ArrayList<RowItem>(); 

titles=getResources().getStringArray(R.array.Headings); 
descriptions=getResources().getStringArray(R.array.Desc); 

for (int j = 0; j < titles.length; j++) { 
    RowItem item = new RowItem(titles[j], descriptions[j]); 
    rowItems.add(item); 
} 


ListView lv=(ListView) rootView.findViewById(R.id.listView); 
MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(getActivity(),R.layout.list_item,rowItems); 
lv.setAdapter(adapter); 

class MySimpleArrayAdapter extends ArrayAdapter<RowItem> { 
    Context context; 

    public MySimpleArrayAdapter(Context context, int resourceId, List<RowItem> items) { 
     super(context, resourceId, items); 
     this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     RowItem rowItem = getItem(position); 
     LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.list_item, parent, false); 

     TextView textView1 = (TextView) rowView.findViewById(R.id.firstLine); 
     TextView textView2 = (TextView) rowView.findViewById(R.id.secondLine); 
     textView1.setText(rowItem.getTitle()); 
     textView2.setText(rowItem.getDesc()); 
     return rowView; 
    } 
} 


public class RowItem { 
    private String title; 
    private String desc; 

    public RowItem(String title, String desc) { 
     this.title = title; 
     this.desc = desc; 
    } 

    public String getDesc() { 
     return desc; 
    } 

    public void setDesc(String desc) { 
     this.desc = desc; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    @Override 
    public String toString() { 
     return title + "\n" + desc; 
    } 
} 
+0

Пожалуйста, разместите код, чтобы мы могли хорошо понимать – LMK

+2

@latifmohammadkhan код здесь не имеет отношения. – alfasin

+0

вы должны зайти в базу данных sqlite. Сделайте один файл базы данных sqlite и поместите его в папку с ресурсами и получите доступ к нему в своем коде. –

ответ

0
ArrayList<HashMap<String, String>> myList = new ArrayList<HashMap<String, String>>(); 


     HashMap<String, String> data1 = new HashMap<String, String>(); 
     data1.put("title","title string"); 
     data1.put("detail","detail paragraph"); 


     HashMap<String, String> data2 = new HashMap<String, String>(); 
     data1.put("title","title string"); 
     data1.put("detail","detail paragraph"); 


     myList.add(data1); 
     myList.add(data2); 
0

я сделал что-то подобное, но мои данные не были статичными. Его вытаскивали из Интернета. Я использовал JSON для обработки этих данных.

Теперь я уверен, насколько он эффективен или полезен в вашем случае.

Хранение данных что-то вроде этого:

JSONArray arrayOfJSONObjects = new JSONArray() 
       .put(new JSONObject().put("title", "myTitle1").put("details", "myDetails1")) 
       .put(new JSONObject().put("title", "myTitle2").put("details", "myDetails2")) 
       .put(new JSONObject().put("title", "myTitle3").put("details", "myDetails3")); 

Для извлечения данных используют простой цикл (это мы использовали в своем классе адаптера):

for(int i=0;i<arrayOfJSONObjects.length();i++) 
{ 
arrayOfJSONObjects.getJSONObject(i).getString("title"); 
arrayOfJSONObjects.getJSONObject(i).getString("details"); 
} 

Позвольте мне еще раз сказать, что я не уверен, что это эффективно или полезно, но это наиболее распространенная практика при получении данных из URL.

Любой не-программист может скопировать вставку или даже отредактировать данные. И вы можете положить тысячи JSONObject, они никогда не замедлят вас.

Смежные вопросы