2014-08-29 37 views
0

我有一个是填充片段的内部的列表视图一个ParseQueryAdapter:如何从ParseQueryAdapter设置TextField?

QueryAdapter:

public class CustomAdapter extends ParseQueryAdapter implements AdapterView.OnItemClickListener { 

public CustomAdapter(Context context) { 

    super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() { 
     public ParseQuery create() { 
      ParseQuery query = new ParseQuery("Invoice"); 
      query.whereEqualTo("CustomerID", ParseUser.getCurrentUser()); 
      return query; 
     } 
    }); 
} 

@Override 
public View getItemView(ParseObject object, View cellview, ViewGroup parent) { 
    if (cellview == null) { 

     cellview = View.inflate(getContext(), R.layout.cell_layout, null); 

    } 

    TextView cellDate = (TextView) cellview.findViewById(R.id.dateTextView); 
    TextView invoice = (TextView) cellview.findViewById(R.id.invoiceNoTextView); 

    cellDate.setText(object.getString("Date")); 
    invoice.setText(object.getString("InvoiceNumber")); 

    return cellview; 
} 

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

} 
} 

片段包含列表视图:

public class InvoiceHistory extends Fragment { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

} 

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

final FrameLayout layout = (FrameLayout) inflater.inflate(R.layout.fragment_invoice_history, container, false); 

    ListView invoicesListView = (ListView) layout.findViewById(R.id.invoiceList); 

    ParseQueryAdapter adapter = new CustomAdapter(getActivity()); 
    invoicesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

      Fragment detailView = new InvoicesFragment(); 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.placeholder, detailView); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 
     } 
    }); 

    invoicesListView.setAdapter(adapter); 
    adapter.loadObjects(); 

    return layout; 
} 

} 

这填充的ListView与来自适当的字段查询,但是当我点击其中一个单元格时发生了片段事务,但我无法弄清楚如何使用查询中的ParseObject Keys在该新片段上设置文本字段。

这是被提交,我想设置文本框的片段:

public class InvoicesFragment extends Fragment { 


public InvoicesFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.fragment_invoices, container, false); 


    return layout; 
} 

Android是超级新的给我,所以也许这是接近它错误的方式。但是我想在这里做的就是将这些细节片段与填充的TextView一起显示出来。我不确定我在做什么。

回答

1

您可以通过在您的DetailsFragment中设置一个构造函数来实现此目的,您可以在要显示的textview信息中传递该构造函数。在下面的例子中,数据和发票号码被传递给构造函数。当片段成立,这个片段设置与解析对象的数据:

invoicesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
    ParseObject object = adapter.getItem(i); 
    Fragment detailView = DetailsFragment.newInstance(object.getString("Date"), 
                object.getString("InvoiceNumber")); 
    // ... 
    } 
}); 

这里是展示新构造函数的DetailsFragment的部分,以及如何你可以在设置您的视图中使用它们:

// InvoicesFragment.java 
public static class InvoicesFragment extends Fragment { 

    // ... 

    public static InvoicesFragment newInstance(String invoiceDate, String invoiceNumber) { 
    InvoicesFragment f = new InvoicesFragment(); 

    Bundle args = new Bundle(); 
    args.putString("invoiceDate", InvoiceDate); 
    args.putString("invoiceNumber", InvoiceNumber); 
    f.setArguments(args); 

    return f; 
    } 

    public String getInvoiceDate() { 
    return getArguments().getString("invoiceDate", ""); 
    } 

    public String getInvoiceNumber() { 
    return getArguments().getString("invoiceNumber", ""); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.fragment_invoices, container, false); 

    // Assign some TextView, ex: dateTextView 
    dateTextView.setText(getInvoiceDate()); 
    return layout; 
    } 

}