簡體   English   中英

分割它傳遞的數據,但不更新列表適配器

[英]Fragment it passed data but doesn't update the list adapter

我在一個Activity上有兩個片段。 當我單擊片段A上的按鈕時,對象將通過托管它們的Activity的接口實現傳遞到片段B。 它確實到達Fragment B ,但是列表沒有更新,它保持為空。

我已經嘗試過以各種可能的方式放置notifyDataSetChanged()

片段B:

public class HistoryFragment extends ListFragment
 {

private static PasswordAdapter adapter ;
private static List<Password> historyList = new ArrayList<Password>();  

 //This is the object I get from Fragment A via the activity interface implementation
public static void addToData( Password addToList ) 
{ 
historyList.add( addToList );
}

@Override
public void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState);
historyList = Password.getTriedPasswords();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup   container, Bundle savedInstanceState)        { 

View view = inflater.inflate(R.layout.fragment_history, container, false);
adapter = new PasswordAdapter( historyList );
setListAdapter(adapter);
return view;
}

private class PasswordAdapter extends BaseAdapter
{
private ArrayList<Password> data; 

public PasswordAdapter( List<Password> historyList ) 
{
    data = new ArrayList<Password>();
    notifyDataSetChanged();
    data.addAll( historyList );
}

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

@Override
public Password getItem( int position ) 
{
    return data.get( position );
}

@Override
public long getItemId(int position) {
    // TODO implement you own logic with ID
    return 0;
}

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

    if (convertView == null) 
    {
        result = LayoutInflater.from(parent.getContext()).inflate(R.layout.history_list_item, parent, false);
    } 
    else 
    {
        result = convertView;
    }

    Password item = getItem( position );

    ( (TextView) result.findViewById(R.id.historyPasswordTextView) ).setText(item.getPasswordString());
    ( (TextView) result.findViewById(R.id.historyDateTextView) ).setText(item.getPasswordString());

    return result;
  }
 }

將項目添加到列表時,不會通知您的適配器。 嘗試在片段中執行此操作

public void addToData( Password addToList ) 
{       
     historyList.add(addToList);
     adapter.updateList(historyList);
}

在您的適配器中創建一個新方法

public void updateList(ArrayList<Password> newData){
    data.clear();
    for(int i = 0; i < newData.size(); i++){
        data.add(newData.get(i));
    }
    notifyDataSetChanged();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM