尝试使用Fragment

时间:2017-04-05 16:11:58

标签: java android android-fragments

im newbie with fragment,我想使用MainActivity中的方法从Fragment中将一些数据插入到数据库中

这是我的代码 的 LaporanFragment

public class LaporanFragment extends Fragment{

EditText judulL, isiL;
TextView nomor_ktp, ambilNama;
ImageView fotoL;
Button kirim;
private ProgressDialog progressDialog;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View v = inflater.inflate(R.layout.fragment_laporan, container, false);

    judulL = (EditText) v.findViewById(R.id.judulLaporan);
    isiL = (EditText) v.findViewById(R.id.isiLaporan);

    nomor_ktp = (TextView) getActivity().findViewById(R.id.nomor_ktp);
    final String noktp = nomor_ktp.getText().toString();
    //fotoL = (ImageView) v.findViewById(R.id.foto_laporan);

    final String jdlLaporan = judulL.getText().toString();
    final String isiLaporan = isiL.getText().toString();

    kirim = (Button) v.findViewById(R.id.kirim_laporan);

    kirim.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            ((MainActivity)getActivity()).kirim_lapor(jdlLaporan, isiLaporan, noktp);
        }
    });

    return v;
}
使用kirim_lapor方法

MainActivity

public void kirim_lapor(final String judul, final String isi, final String username){

    StringRequest stringRequest = new StringRequest(Request.Method.POST,
            Constants.URL_LAPOR,
            new Response.Listener<String>(){
                @Override
                public void onResponse(String response){
                    //progressDialog.dismiss();

                    try{
                        JSONObject jsonObject = new JSONObject(response);

                        //Toast.makeText(LaporanFragment.this, jsonObject.getString("message"), Toast.LENGTH_LONG).show();
                    }catch(JSONException e){
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener(){
                @Override
                public void onErrorResponse(VolleyError error){
                    //progressDialog.hide();
                    //Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
                }
            }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("judul_laporan", judul);
            params.put("isi_laporan", isi);
            params.put("no_ktp", username);
            return params;
        }
    };

    RequestHandler.getInstance(this).addToRequestQueue(stringRequest);
}

问题是当我在片段中按按钮 kirim 时,应用会崩溃 请帮帮我们,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

要本地化并阻止进一步的错误,而不是通过强制转换public class LaporanFragment extends Fragment { private LaporanListener mListener; // Define a Listener to 'speak up' to the main activity public interface LaporanListener { public void onSendReportClicked(String title, String content, String idNumber); } ... } 调用MainActivity方法,您应该使监听器告诉活动有关数据。

在Fragment中为Listener创建界面:

public class LaporanFragment extends Fragment {

  ...
  ...
  kirim.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View view) {
           mListener.onSendReportClicked(jdlLaporan, isiLaporan, noktp);
         }
  });
  ...
  ...
}

单击sendReport按钮时,请使用侦听器:

public class MainActivity extends Activity implements LaporanFragment.LaporanListener {

   ...

   @Override
   public void onSendReportClicked(String title, String content, String idNumber) {
     // MainActivity will receive the data here.
     // You need to process here.
   }

  ...
}

然后,您需要实现MainActivity的接口监听器:

body{
    background:linear-gradient(180deg,#fff 100px,#ff0 100px);
    height:100vh;
    margin:0;
}

如需进一步阅读,请阅读Creating Custom Listeners