我想将价格(不带标题)从RecyclerView传递到NewActivity,然后按一下按钮显示排序的价格。通过单击一个按钮(按钮在RecyclerView下),我无法将所有价格传递给NewActivity
class MyAdapter(val context: Context, val costs: List<Cost>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val cos = costs[position]
holder.title.text = cos.price.toString()
holder.price.text = cos.price.toString()
}
override fun onCreateViewHolder(parent: ViewGroup, convertVie: Int): MyViewHolder {
val myView = LayoutInflater.from(context).inflate(R.layout.one_item,parent,false)
return MyViewHolder(myView)
}
override fun getItemCount(): Int {
return costs.size
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var price = itemView.findViewById(R.id.title) as TextView
var price = itemView.findViewById(R.id.price) as TextView
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(this, LinearLayout.VERTICAL, false)
var costs = ArrayList<Cost>()
costs.add(Cost(3.00))
costs.add(Cost(5.00))
costs.add(Cost(1.00))
costs.add(Cost(7.00))
val adapter = MyAdapter(this, costs)
recyclerView.adapter = adapter
}
答案 0 :(得分:2)
为了获取适配器的结果
class MyAdapter extends RecyclerView.Adapter{
List<Cost> costs;
.. some other code
// Return total cost of items inside list
public float getTotal(){
float total = 0f;
for(Cost cost : costs)
total+=cost.price;
return total;
}
通过单击Recyclerview外部的按钮进行排序列表
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
MyAdapter adapter = (MyAdapter)recyclerview.getAdapter();// fetching adapter
Collections.sort(adapter.getItems(),new Comparator<Cost>() {
@Override
public int compare(Cost c1, Cost c2) {
return c1.price - c2.price;// sort item in list
}
});
adapter.notifyDataSetChanged();// update list
}
});
adapter.getItems()
public List<Cost> getItems(){return costs;}
答案 1 :(得分:0)
在适配器中添加一个方法,getList()返回价格列表,我不确定要在kotlin中进行排序,因此您必须找到它,然后才能调用adapter.getList ()从同一个活动中的按钮获取所有项目,然后您可以通过几种方式在活动之间传递它们,可以使用bundle并在意图中传递它,如果列表很小,则可以在cost对象,如果它具有很多字段,则可以将其传递给视图模型并从另一个类访问它,可以创建接口并以任何方式在任何对象之间传递它,也可以使用来将其转换为JSON字符串。 gson库,有很多方法取决于您的用例
答案 2 :(得分:0)
You should provide some repository for your data. Singleton instance that will store your data, and you would retrieve from it in any activity you want.
Basic schema for example:
class Repo{
private List<String> mData;
}
View (Ani fragment or activity). You just need call Repo.getInstance().getList();
And it won`t be depends on lifecyle of any android component.
P.S. Use Android Architecture Components https://developer.android.com/topic/libraries/architecture
答案 3 :(得分:0)
由于您使用的是Kotlin,并且在将设置适配器设置为recyclerview之前已实例化了您的费用对象,因此您只需调用
costs.sortedBy { it.price }.map { it.price }
会给您带来一点点Int的困扰,您可以使用writeIntArray
来传达您的意图。 (您可能需要通过.toArray()
进行投射),然后可以轻松地从您的活动意图中获取它
答案 4 :(得分:-2)
您可以使用gson库将整个列表转换为json字符串,方法是将其从当前活动传递到意图,然后在接收到的活动中恢复到列表。
当前活动:
注意:将json字符串传递给intent。
接收活动: 注意:从intent接收json字符串。