2016-07-18 39 views
0

我想弄清楚如何显示捆绑数据,我已将碎片显示在RecyclerView中。在我的活动的onClick方法中,我从用户获得输入并将值包装在一个Bundle中。然后我将它发送到要在RecyclerView中显示的片段。我有点难以理解如何设置我的RecyclerView适配器来显示Bundle数据任何帮助将不胜感激。如何在碎片中显示捆绑数据并在RecyclerView中显示

这是我的活动代码

public class OwesActivity extends AppCompatActivity 
{ 
private Button okButton; 
private EditText nameEditText; 
private EditText amountEditText; 
private Spinner spinner; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_owes); 

    spinner = (Spinner)findViewById(R.id.spinner); 
    nameEditText = (EditText)findViewById(R.id.name_edit_text); 
    amountEditText = (EditText)findViewById(R.id.amount_edit_text); 

    okButton = (Button)findViewById(R.id.okButton); 
    okButton.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      if (isInputEmpty()) 
      { 

      } 
       else 
       { 

        Bundle extras = new Bundle(); 
        extras.putString("nameKey",  nameEditText.getText().toString()); 
        extras.putString("amountKey", amountEditText.getText().toString()); 

        Fragment fragment; 

       switch (spinner.getSelectedItemPosition()) //value of spinner determines which list the extras go to. 
       { 
        case 0:// Owes Me 
         fragment = new OwesMeFragment(); 
         fragment.setArguments(extras); 
         break; 

        case 1: // I Owe 
         fragment = new OweFragment(); 
         fragment.setArguments(extras); 
         break; 

        default: 
         break; 
       } 

       startNewActivity(); 

      } 
     } 
    }); 

    // Create an ArrayAdapter using the string array and a default spinner layout 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
      R.array.spinner_choices, android.R.layout.simple_spinner_item); 

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spinner.setAdapter(adapter); 
} 

public boolean isInputEmpty() 
{ 
    if(nameEditText.getText().toString().isEmpty()|| 
      amountEditText.getText().toString().isEmpty()) 
    { 
     Toast.makeText(this, "Field cannot be empty", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

    else 
    { 
     return false; 
    } 
} 

public void startNewActivity() 
{ 
    Intent intent = new Intent(this, MainActivity.class); 
    startActivity(intent); 
} 
} 

这里是片段

public class OwesMeFragment extends Fragment 
{ 


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




@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) 
{ 
    //Inflate the view for this fragment 
    View view = inflater.inflate(R.layout.fragment_owe, container, false); 

    Bundle extras = this.getArguments(); 

    if(extras != null) 
    { 
     String nameExtra = extras.getString("nameKey"); 
     String amountExtra = extras.getString("amountKey"); 


    } 

    //get a reference to the recyclerView 
    RecyclerView oweRecyclerView = (RecyclerView)view.findViewById(R.id.owe_recycler_view); 

    //set the layoutManager 
    oweRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 


    return view; 

} 

    } 

最后这里的适配器(不完全)

public class MyViewHolder extends RecyclerView.ViewHolder 
{ 
    public TextView name; 
    public TextView amount; 

    public MyViewHolder(View view) 
    { 
     super(view); 
     name = (TextView)view.findViewById(R.id.name_title); 
     amount = (TextView)view.findViewById(R.id.amount_title); 
    } 

} 

//Inflate listRow layout 
@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int ViewType) 
{ 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.payup_list_row, parent, false); 

    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) 
{ 

} 

@Override 
public int getItemCount() 
{ 
    return 0; 
} 
} 

回答

0

我认为你通过传递包来从活动中获取数据!

现在做一样东西只是为你的数据,如模型类,

/** 
    * Created by Uttam on 7/19/2016. 
    */ 
    public class Mydata { 
     String nameExtra; 

     String amountExtra; 

     public Mydata(String nameExtra, String amountExtra) { 
      this.nameExtra = nameExtra; 
      this.amountExtra = amountExtra; 
     } 

     public Mydata() { 
     } 

     public String getAmountExtra() { 
      return amountExtra; 
     } 

     public void setAmountExtra(String amountExtra) { 
      this.amountExtra = amountExtra; 
     } 

     public String getNameExtra() { 
      return nameExtra; 
     } 

     public void setNameExtra(String nameExtra) { 
      this.nameExtra = nameExtra; 
     } 
    } 

在此之后,在你的片段创建列表..

List<Mydata> mydataList = new ArrayList<>(); 

现在,当您从包中获取数据所以得到数据后

Bundle extras = this.getArguments(); 

if(extras != null) 
{ 
    String nameExtra = extras.getString("nameKey"); 
    String amountExtra = extras.getString("amountKey"); 

    //Just add your data in list 
    Mydata mydata = new Mydata(); // object of Model Class 
    mydata.setAmountExtra(amountExtra); 
    mydata.setNameExtra(nameExtra); 
    mydataList.add(mydata); 

} 

而在最后现在只是将此列表传递给您的适配器通过创建一个Setter方法在你的Adapte中。

myAdapter.setMyDataList(mydataList); // passing list to Adapter 

在此之前不要忘记在您的片段中注册您的适配器!

像这样创建适配器..

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import java.util.ArrayList; 
import java.util.List; 


/** 
* Created by Uttam on 7/19/2016. 
*/ 
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    private Context context; 
    private List<Mydata> myDataList; 

    public MyAdapter(Context context) { 
     this.context = context; 
     myDataList = new ArrayList<>(); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     // Replace with your layout 
     View view = LayoutInflater.from(context).inflate(R.layout.yourLayout_Name, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     // Set Your Data here to yout Layout Components.. 

     // to get Amount 
      myDataList.get(position).getAmountExtra(); 

    } 

    @Override 
    public int getItemCount() { 
     if (myDataList.size() != 0) { 
      // return Size of List if not empty! 
      return myDataList.size(); 
     } 
     return 0; 
    } 

    public void setMyDataList(List<Mydata> myDataList) { 
     // getting list from Fragment. 
     this.myDataList = myDataList; 
     notifyDataSetChanged(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 

     // attach you component here using findViewById // 
     public ViewHolder(View itemView) { 
      super(itemView); 
      // itemView.findViewById 
     } 
    } 
} 

所有组希望这将帮助你很多..!

+0

谢谢!这真的帮助了我。 – Ch1bz

0

是的,你可以通过简单地重新实现这一目标 - 在按钮的点击侦听器中启动包含数据包的片段。虽然这不是最好的办法。但这是最简单的方法。

+0

谢谢你的解决方案。下次我会记住这一点。 – Ch1bz

0

您可以使用当您点击按钮时会调用的接口方法,并且在片段中您可以简单地实现接口方法来重新绑定适配器。

+0

谢谢你的解决方案。下次遇到同样的问题时,我会记住这一点。 – Ch1bz

相关问题