2017-03-18 74 views
0

我已創建自定義列表視圖。我想添加項目到我的列表視圖從MainActivity中的第二個活動,即使我的活動沒有打開。當我的Mainactivity(帶有列表視圖)也將打開時,向我展示我添加的內容。將項目添加到列表視圖到另一個活動

這是我的第一類代碼:

class TableItemsClass 
{ 
    public string Description { get; set; } 
    public string Quantity { get; set; } 
    public string ItemPrice { get; set; } 
    public string TotalPrice { get; set; } 

} 

我的第二類

class MyListViewAdapter : BaseAdapter<TableItemsClass> 
{ 
    public List<TableItemsClass> mitems; 
    private Context mContext; 
    public MyListViewAdapter(Context context, List<TableItemsClass> items) 
    { 
     mitems = items; 
     mContext = context; 

    } 
    public override int Count 
    { 
     get 
     { 
      return mitems.Count; 
     } 
    } 
    public override long GetItemId(int position) 
    { 
     return position; 
    } 
    public override TableItemsClass this[int position] 
    { 
     get 
     { 
      return mitems[position]; 
     } 

    } 
    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View row = convertView; 
     if (row == null) 
     { 
      row = LayoutInflater.From(mContext).Inflate(Resource.Layout.TableItems, null, false); 

     } 
     TextView txtDescription = row.FindViewById<TextView>(Resource.Id.txtDescription); 
     txtDescription.Text = mitems[position].Description; 


     TextView txtQuantity = row.FindViewById<TextView>(Resource.Id.txtQuantity); 
     txtQuantity.Text = mitems[position].Quantity; 

     TextView txtItemPrice = row.FindViewById<TextView>(Resource.Id.txtItemPrice); 
     txtItemPrice.Text = mitems[position].ItemPrice; 

     TextView txtTotalPrice = row.FindViewById<TextView>(Resource.Id.txtTotalPrice); 
     txtTotalPrice.Text = mitems[position].TotalPrice; 



     return row; 
    } 
} 

}

所以我用這樣的代碼在第二個活動增加一個額外的項目,我的主要Activity.But列表視圖,但不幸的是,它不添加任何東西。

private List<TableItemsClass> mItems; 
    private ListView mlistview; 

    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 



     SetContentView(Resource.Layout.TableItemsMain); 
     mlistview = FindViewById<ListView>(Resource.Id.listView1); 

     mItems = new List<TableItemsClass>(); 

     mItems.Add(new TableItemsClass() { Description = "test", Quantity = "3", ItemPrice = "2.00", TotalPrice = "6.00" }); 

     MyListViewAdapter adapter = new MyListViewAdapter(this, mItems); 


     mlistview.Adapter = adapter; 
+0

有幾種解決方案。告訴我更多關於您的情況,然後我會提出一個完整的代碼解決方案 1.將數據從活動傳遞到帶有Intent的ListView活動 2.在第二個活動中保存數據(在文件中,SharedPref,sqlite)並重新加載listview 3。保存數據(在靜態變量)在第二個活動,並重新加載列表視圖 –

+1

我最好的想法是,如果我可以從意見添加列表視圖的意圖。並且,當打開我的MainActivity以向我顯示所有項目時,我已添加了意圖。謝謝 – Dim

+0

,請使用此intent.putExtra(「key」,String [] items); –

回答

0

嘗試LocalBroadcastReceiver解決您的問題。這裏是你如何在你的情況下使用 -

將這個代碼在你的接收機activity,即MainActivity

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // Get extra data included in the Intent 
    TableItemsClass message = intent.getSerializableExtra("message"); 
    // Add this data into your list dataset... Later on you can update your 
    // `onResume()` to update data... 
    } 
}; 

註冊接收器插入oncreate()

@Override 
public void onCreate(Bundle savedInstanceState) { 

    ... 

    // Register to receive messages. 
    // We are registering an observer (mMessageReceiver) to receive Intents 
    // with actions named "custom-event-name". 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
     new IntentFilter("custom-event-name")); 
} 

不要忘了你的毀滅receiver -

@Override 
protected void onDestroy() { 
    // Unregister since the activity is about to be closed. 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    super.onDestroy(); 
} 

在發送activity執行此代碼,即SecondActivity

// Send an Intent with an action named "custom-event-name". The Intent sent should 
// be received by the ReceiverActivity. 
private void sendMessage() { 
    Intent intent = new Intent("custom-event-name"); 
    // You can also include some extra data. 
    intent.putExtra("message", "your model to be put in receiver's listview"); 
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 
相關問題