2016-10-26 4 views
3

Я использую два ListViews (у List1 есть данные, а List2 пуст).ListView не обновляется после внесения изменений в данные

Пользователь может ввести имя в качестве ввода, и если в списке 1 указано имя и добавлено добавление Button, то отметки должны быть уменьшены на 1, и оба следует изменить как ListViews.

Пример:

Если List1 имеет 10 знаков и имя вводится затем List1 должны установить отметки 9 и List2 должны были знаки установлены в 1.

Если бы мы сделали это 10 раз, то List1 имена должны быть удалены и List2 имеет маркировку, чтобы установить 10.

Пример 2:

Пусть выполнены list1 имеет метки, установленные до 8 и Lis t2, установленным в 2. Если нажать кнопку суб, то должны быть добавлены оба списка. На этом этапе List2 должен быть удален, а List1 должен иметь общие оценки как 10.

Ниже приведена логика, которую я использовал, однако она не работает, она создает несколько строк и меток, которые не обновляются должным образом.

HomeAct класс

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 

public class HomeAct extends Activity { 

List<DocItem> docDet1 = new ArrayList<DocItem>(); 
List<DocItem> docDet2 = new ArrayList<DocItem>(); 
ListView lv1, lv2; 
EditText editText; 
Button btn1, btn2; 
DocDetAdapter adapter1, adapter2; 
int n=0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.home_act); 
    lv1 = (ListView)findViewById(R.id.lv_det1); 
    lv2 = (ListView)findViewById(R.id.lv_det2); 
    editText = (EditText)findViewById(R.id.editText1); 
    btn1 = (Button)findViewById(R.id.btn1); 
    btn2 = (Button)findViewById(R.id.btn2); 
    adapter1 = new DocDetAdapter(1); 
    adapter2 = new DocDetAdapter(2); 

    docDet1.add(new DocItem("1", "john", 20)); 
    docDet1.add(new DocItem("2", "james", 5)); 
    docDet1.add(new DocItem("3", "shaun", 60)); 
    docDet1.add(new DocItem("4", "joy", 10)); 
    docDet1.add(new DocItem("5", "mark", 1)); 

    lv1.setAdapter(adapter1); 
    lv2.setAdapter(adapter2); 

    btn1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      for(int j =0;j<docDet1.size();j++){ 
       final DocItem curItem = docDet1.get(j); 
       if(curItem.name.equals(editText.getText().toString())){ 
        n++; 
       DocItem docItem = docDet1.get(j); 
        docDet1.get(j).marks = n; 
        docDet2.add(0, docItem); 
        adapter1.notifyDataSetChanged(); 
        adapter2.notifyDataSetChanged(); 
        editText.setText(""); 
        } 
       } 
      editText.setText(""); 
     } 
    }); 

    btn2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      for(int j =0;j<docDet2.size();j++){ 
       final DocItem curItem = docDet2.get(j); 
       if(curItem.name.equals(editText.getText().toString())){ 

       DocItem docItem = docDet1.get(j); 
        docDet2.remove(j); 
        docDet1.add(0, docItem); 
        adapter1.notifyDataSetChanged(); 
        adapter2.notifyDataSetChanged(); 
        editText.setText(""); 
        } 
       } 
      editText.setText(""); 
     } 
    }); 
} 

private class DocDetAdapter extends BaseAdapter { 

    int mode; // 1 or 2 

    public DocDetAdapter(int mode) { 
     this.mode = mode; 
    } 

    @Override 
    public int getCount() { 
     if (mode == 1) 
      return docDet1.size(); 
     else 
      return docDet2.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

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

    @Override 
    public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     LayoutInflater li = getLayoutInflater(); 

     if (convertView == null) 
      convertView = li.inflate(R.layout.row_tray_det, null); 

     TextView tvItemName = (TextView) convertView 
       .findViewById(R.id.tv_item_name); 
     TextView tvRack = (TextView) convertView.findViewById(R.id.tv_rack); 
     TextView tvQty = (TextView) convertView.findViewById(R.id.tv_qty); 

     DocItem invItem; 
     if (mode == 1) 
      invItem = docDet1.get(position); 
     else 
      invItem = docDet2.get(position); 

     tvItemName.setText(invItem.docNo); 
     tvRack.setText(invItem.name); 
     tvQty.setText(invItem.marks + ""); 

     return convertView; 
     } 
    } 
    } 

DocItem класс

public class DocItem { 

public String docNo, name; 
public Integer marks; 

public DocItem(String docNo, String name, Integer marks) { 
    super(); 
    this.docNo = docNo; 
    this.name = name; 
    this.marks = marks; 
    } 
    } 

home_act.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ems="10" > 
    </EditText> 

    <Button 
     android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ems="3" 
     android:text="Add" /> 

    <Button 
     android:id="@+id/btn2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ems="3" 
     android:text="Sub" /> 
</LinearLayout> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:gravity="center" 
    android:text="list 1" 
    android:textSize="20sp" 
    android:textStyle="bold" > 
</TextView> 

<ListView 
    android:id="@+id/lv_det1" 
    android:layout_width="fill_parent" 
    android:layout_height="200dp" 
    android:layout_marginTop="10dp" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:gravity="center" 
    android:text="list 2" 
    android:textSize="20sp" 
    android:textStyle="bold" > 
</TextView> 

<ListView 
    android:id="@+id/lv_det2" 
    android:layout_width="fill_parent" 
    android:layout_height="250dp" /> 

</LinearLayout> 

row_tray_det

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <View 
    android:id="@+id/v_doc_seperator" 
    android:layout_width="match_parent" 
    android:layout_height="4dp" 
    android:background="@color/blue" 
    android:visibility="gone" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/row_bg_transparent_white" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/tv_rack" 
     style="@android:style/TextAppearance.Medium" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ems="5" 
     android:gravity="center_vertical" 
     android:padding="10dp" 
     android:text="Sl no" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/tv_item_name" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
     android:text="Name" 
     android:textSize="15sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/tv_qty" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:ems="10" 
     android:gravity="center_vertical" 
     android:paddingRight="3dp" 
     android:text="Marks" 
     android:textSize="16sp" 
     android:textStyle="bold" /> 
</LinearLayout> 

Вот изображение ожидаемого выхода: Expected Output

В приведенном выше выходе, Джой было 10 знаков, и если "Джой" вводится в качестве входных данных, то список должен быть указан выше.

Я мог бы действительно использовать помощь, спасибо заранее.

+0

форма, что я вижу, после выполнения кода. Вы eneter name john. есть два элемента, и один из них обновляется по нажатому add. Теперь я не совсем понимаю, что вы хотите и что не работает. Его непонятно – Raghunandan

+0

, если имя имеет отметки 10, если оно согласовано, то метки должны быть уменьшены на 1 и добавлены в список2 с отметками как 1, а метки списка1 должны быть 9. – Balaji

+0

ok. Но у вас есть n ++; а затем 'docDet1.get (j) .marks = n;'. Так что это непонятно. Можете ли вы разместить мгновенный снимок, что вам нужно – Raghunandan

ответ

2

Из того, что я понимаю, если имя, введенное в EditText совпадает с именем в списке уменьшить метки на 1. Добавьте одинаковое содержание в списке 2 и установите метки в 1.

Если нажать добавить в то же самое список имен 1 знак для имени уменьшается, а метки в списке2 становятся2.

изменения должны быть сделаны для добавления части

btn1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      DocItem changeItem = null; 
      for (int i = 0; i < docDet1.size(); i++) { 
       DocItem docItem = docDet1.get(i); 
       if (docItem.name.equals(editText.getText().toString())) { 
        changeItem = docDet1.get(i); 
        changeItem.marks = changeItem.marks - 1; 
        if (findDocItem(editText.getText().toString()) != null) { 
         DocItem docI = findDocItem(editText.getText().toString()); 
         docI.marks = docI.marks + 1; 
        } else { 
         docDet2.add(new DocItem(changeItem.docNo, changeItem.name, 1)); 
        } 

       } 

      } 

      adapter2.notifyDataSetChanged(); 
      adapter1.notifyDataSetChanged(); 
     } 
    }); 

Чтобы найти и п

DocItem findDocItem(String name) { 
    for (DocItem item : docDet2) { 
     if (item.name.equals(name)) { 
      return item; 
     } 
    } 
    return null; 
} 

notifyDataSetChanged Избегайте вызова внутри для цикла.

Вы бы сделали что-то подобное для sub.

Для вспомогательной части от обсуждения в чате

btn2.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      int changedmarks=0; 
      for (int i = 0; i < docDet2.size(); i++) { 
       DocItem docItem = docDet2.get(i); 
       if (docItem.name.equals(editText.getText().toString())) { 
        changedmarks =docDet2.get(i).marks; 
        docDet2.remove(i); 

       } 
      } 
      if(findDocItem2(editText.getText().toString())!=null) 
      { 
       DocItem docitem = findDocItem2(editText.getText().toString()); 
       docitem.marks = docitem.marks+ changedmarks; 
      } 

      adapter1.notifyDataSetChanged(); 
      adapter2.notifyDataSetChanged(); 
     } 
    }); 

Тогда

DocItem findDocItem2(String name) { 
    for (DocItem item : docDet1) { 
     if (item.name.equals(name)) { 
      return item; 
     } 
    } 
    return null; 
} 
Смежные вопросы