2016-04-01 18 views
-2

Ich habe eine Listenansicht, die Zahlen aus einer Datenbank bringt. Ich muss diese Zahlen multiplizieren und Summe aller Zahlen von meiner Listview erhalten. Aber das Problem ist, dass die TextView, in der ich total setzen muss, in der Hauptaktivität und nicht auf dem Adapter ist. Wie kann ich die Summe von einem Adapter an die Hauptaktivität senden? Muss ich einen Loader verwenden?ListView Adapter und MainActivity

Ich habe dies in ListViewAdapter.java

public class ListViewAdapter extends BaseAdapter{ 

public ArrayList<HashMap<String, String>> list; 

Activity activity; 
int contador = 0; 
public ListViewAdapter(Activity activity, ArrayList<HashMap<String, String>> list){ 
    super(); 
    this.activity = activity; 
    this.list = list; 

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

@Override 
public Object getItem(int position) { 
    return list.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 
private class ViewHolder { 
TextView name; 
TextView marc, cant, prec;} 

@Override 

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

    final ViewHolder holder; 
    LayoutInflater inflater = activity.getLayoutInflater(); 
    if (convertView == null){ 
     convertView = inflater.inflate(R.layout.list_colum, null); 
     holder = new ViewHolder(); 

     holder.name = (TextView) convertView.findViewById(R.id.name); 
     holder.marc = (TextView) convertView.findViewById(R.id.marc); 
     holder.cant = (TextView) convertView.findViewById(R.id.cant); 
     holder.prec = (TextView) convertView.findViewById(R.id.prec); 
     convertView.setTag(holder); 
    } 
    else{ 

     holder=(ViewHolder) convertView.getTag(); 

    } 

    HashMap<String, String> map = list.get(position); 
    holder.name.setText(map.get(FIRST_COLUMN)); 
    holder.marc.setText(map.get(SECOND_COLUMN)); 
    holder.prec.setText(map.get(THIRD_COLUMN)); 
    holder.cant.setText(map.get(FOURTH_COLUMN)); 



    return convertView; 

} 

Und das in MainActivity

public class MAinActivity extends AppCompatActivity { 
private ArrayList<HashMap<String, String>> list; 
HashMap<String, String> temp = new HashMap<String, String>(); 



private Button scanBtn; 
private TextView total; 

ListView listView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    list = new ArrayList<HashMap<String, String>>(); 


    setContentView(R.layout.MainActivity); 

    total = (TextView)findViewById(R.id.total); //this is the TextView where I have to put the result coming from the adapter. 



} 


public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    listView = (ListView)findViewById(R.id.listacompras); 


    ListViewAdapter adapter = new ListViewAdapter(this,list); 
    listView.setAdapter(adapter); 



} 
+0

Verwenden Sie einen BroadcastReceiver. –

Antwort

0

Sie es auf diese Weise erreichen können.

Erstellen Sie eine Methode in Ihrer Haupttätigkeit wie diese

public updateTextView(String text){ 
    totla.setText(text); 
} 

und Adapter Sie Text wie dieser

((MAinActivity) activity).updateTextView("New text From Adapter"); 
+0

Mein Gott, es war so einfach, danke Mustanser lqbal! –

+0

können Sie die Antwort akzeptieren. wenn das deine Frage beantwortet. –

+0

Ja. Na sicher! Vielen Dank! –

0

Oder setzen können, können Sie eine Schnittstelle in Ihrem ListViewAdapter hinzufügen

public class ListViewAdapter ...{ 
    public interface Listener{ 
     public void updateTotal(int total); 
    } 
    // also add a setter method for mListener 
    Listener mListener; 


    .... 
    // call mListener.updateTotal() to show updated total 
} 

Implementieren Sie dann die Listener-Schnittstelle in Ihrer MainActivity

public class MainActivity extends AppCompatActivity implements ListViewAdapter.Listener { 
    ... 

    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     listViewAdapter.setListener(this); 
    } 

    public void updateTotal(int total){ 
     // set total here 
    } 
} 

Dies ist das Skelett des Codes. Sie müssen es an Ihren Code anpassen, damit es funktioniert.

Viel Glück :)

+0

Mein Gott, es war so einfach, vielen Dank skangmy! –

Verwandte Themen