繁体   English   中英

Android-找不到符号方法getSystemService(String)

[英]Android - cannot find symbol method getSystemService(String)

我是java / android中的新手,我试图使片段活动并将适配器实现到片段'tab2'中,但在行中得到错误代码(adapter.java):

充气=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

我已经在尝试修复。 但仍然无法解决此问题。 那么,我的代码有什么问题呢? 这是我的完整代码adapter.java:

 package com.yoga1215051164.fragment2.adapter; /** * Created by Yatogami on 24/05/2017. */ import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.yoga1215051164.fragment2.R; import com.yoga1215051164.fragment2.data.Data; import com.yoga1215051164.fragment2.tab2; import java.util.List; public class Adapter extends BaseAdapter { private tab2 activity; private LayoutInflater inflater; private List<Data> items; public Adapter(tab2 activity, List<Data> items) { this.activity = activity; this.items = items; } @Override public int getCount() { return items.size(); } @Override public Object getItem(int location) { return items.get(location); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (inflater == null) inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (convertView == null) convertView = inflater.inflate(R.layout.list_row, null); TextView id = (TextView) convertView.findViewById(R.id.id); TextView nama = (TextView) convertView.findViewById(R.id.nama); TextView alamat = (TextView) convertView.findViewById(R.id.alamat); Data data = items.get(position); id.setText(data.getId()); nama.setText(data.getNama()); alamat.setText(data.getAlamat()); return convertView; } } 

和这段代码片段tab2.java:

 package com.yoga1215051164.fragment2; /** * Created by Yatogami on 25/05/2017. */ import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.yoga1215051164.fragment2.adapter.Adapter; import com.yoga1215051164.fragment2.app.AppController; import com.yoga1215051164.fragment2.data.Data; import com.yoga1215051164.fragment2.util.Server; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.VolleyLog; import com.android.volley.toolbox.JsonArrayRequest; import com.android.volley.toolbox.StringRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class tab2 extends Fragment implements SwipeRefreshLayout.OnRefreshListener{ FloatingActionButton fab; ListView list; SwipeRefreshLayout swipe; List<Data> itemList = new ArrayList<Data>(); Adapter adapter; int success; AlertDialog.Builder dialog; LayoutInflater inflater; View dialogView; EditText txt_id, txt_nama, txt_alamat; String id, nama, alamat; private static final String TAG = tab2.class.getSimpleName(); private static String url_select = Server.URL + "select.php"; private static String url_insert = Server.URL + "insert.php"; private static String url_edit = Server.URL + "edit.php"; private static String url_update = Server.URL + "update.php"; private static String url_delete = Server.URL + "delete.php"; public static final String TAG_ID = "id"; public static final String TAG_NAMA = "nama"; public static final String TAG_ALAMAT = "alamat"; private static final String TAG_SUCCESS = "success"; private static final String TAG_MESSAGE = "message"; String tag_json_obj = "json_obj_req"; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v =inflater.inflate(R.layout.tabmenu2,container,false); super.onCreate(savedInstanceState); fab = (FloatingActionButton) v.findViewById(R.id.fab_add); swipe = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh_layout); list = (ListView) v.findViewById(R.id.list); adapter = new Adapter(tab2.this, itemList); list.setAdapter(adapter); swipe.setOnRefreshListener(this); swipe.post(new Runnable() { @Override public void run() { swipe.setRefreshing(true); itemList.clear(); adapter.notifyDataSetChanged(); callVolley(); } } ); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { DialogForm("", "", "", "SIMPAN"); } }); list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(final AdapterView<?> parent, View view, final int position, long id) { // TODO Auto-generated method stub final String idx = itemList.get(position).getId(); final CharSequence[] dialogitem = {"Edit", "Delete"}; dialog = new AlertDialog.Builder(tab2.this); dialog.setCancelable(true); dialog.setItems(dialogitem, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub switch (which) { case 0: edit(idx); break; case 1: delete(idx); break; } } }).show(); return false; } }); return v; } @Override public void onRefresh() { itemList.clear(); adapter.notifyDataSetChanged(); callVolley(); } private void kosong(){ txt_id.setText(null); txt_nama.setText(null); txt_alamat.setText(null); } private void DialogForm(String idx, String namax, String alamatx, String button) { dialog = new AlertDialog.Builder(tab2.this); inflater = getLayoutInflater(); dialogView = inflater.inflate(R.layout.form_biodata, null); dialog.setView(dialogView); dialog.setCancelable(true); dialog.setIcon(R.mipmap.ic_launcher); dialog.setTitle("Form Biodata"); txt_id = (EditText) dialogView.findViewById(R.id.txt_id); txt_nama = (EditText) dialogView.findViewById(R.id.txt_nama); txt_alamat = (EditText) dialogView.findViewById(R.id.txt_alamat); if (!idx.isEmpty()){ txt_id.setText(idx); txt_nama.setText(namax); txt_alamat.setText(alamatx); } else { kosong(); } dialog.setPositiveButton(button, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { id = txt_id.getText().toString(); nama = txt_nama.getText().toString(); alamat = txt_alamat.getText().toString(); simpan_update(); dialog.dismiss(); } }); dialog.setNegativeButton("BATAL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); kosong(); } }); dialog.show(); } private void callVolley(){ itemList.clear(); adapter.notifyDataSetChanged(); swipe.setRefreshing(true); JsonArrayRequest jArr = new JsonArrayRequest(url_select, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { Log.d(TAG, response.toString()); for (int i = 0; i < response.length(); i++) { try { JSONObject obj = response.getJSONObject(i); Data item = new Data(); item.setId(obj.getString(TAG_ID)); item.setNama(obj.getString(TAG_NAMA)); item.setAlamat(obj.getString(TAG_ALAMAT)); itemList.add(item); } catch (JSONException e) { e.printStackTrace(); } } adapter.notifyDataSetChanged(); swipe.setRefreshing(false); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); swipe.setRefreshing(false); } }); AppController.getInstance().addToRequestQueue(jArr); } private void simpan_update() { String url; if (id.isEmpty()){ url = url_insert; } else { url = url_update; } StringRequest strReq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "Response: " + response.toString()); try { JSONObject jObj = new JSONObject(response); success = jObj.getInt(TAG_SUCCESS); if (success == 1) { Log.d("Add/update", jObj.toString()); callVolley(); kosong(); Toast.makeText(tab2.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show(); adapter.notifyDataSetChanged(); } else { Toast.makeText(tab2.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Error: " + error.getMessage()); Toast.makeText(tab2.this, error.getMessage(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); if (id.isEmpty()){ params.put("nama", nama); params.put("alamat", alamat); } else { params.put("id", id); params.put("nama", nama); params.put("alamat", alamat); } return params; } }; AppController.getInstance().addToRequestQueue(strReq, tag_json_obj); } private void edit(final String idx){ StringRequest strReq = new StringRequest(Request.Method.POST, url_edit, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "Response: " + response.toString()); try { JSONObject jObj = new JSONObject(response); success = jObj.getInt(TAG_SUCCESS); if (success == 1) { Log.d("get edit data", jObj.toString()); String idx = jObj.getString(TAG_ID); String namax = jObj.getString(TAG_NAMA); String alamatx = jObj.getString(TAG_ALAMAT); DialogForm(idx, namax, alamatx, "UPDATE"); adapter.notifyDataSetChanged(); } else { Toast.makeText(tab2.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Error: " + error.getMessage()); Toast.makeText(tab2.this, error.getMessage(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("id", idx); return params; } }; AppController.getInstance().addToRequestQueue(strReq, tag_json_obj); } private void delete(final String idx){ StringRequest strReq = new StringRequest(Request.Method.POST, url_delete, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "Response: " + response.toString()); try { JSONObject jObj = new JSONObject(response); success = jObj.getInt(TAG_SUCCESS); if (success == 1) { Log.d("delete", jObj.toString()); callVolley(); Toast.makeText(tab2.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show(); adapter.notifyDataSetChanged(); } else { Toast.makeText(tab2.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Error: " + error.getMessage()); Toast.makeText(tab2.this, error.getMessage(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("id", idx); return params; } }; AppController.getInstance().addToRequestQueue(strReq, tag_json_obj); } } 

谢谢

您必须将上下文传递给适配器,因此适配器应如下所示

private Context context;
public Adapter(Context context, List<Data> items) {
        this.context=context
        this.items = items;
    }

并使用这样的上下文

inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

并像这样从片段发送上下文

Adapter adapter=new Adapter(getActivity(),listItems);

Fragment不会扩展Context ,这就是为什么您不能调用getSystemService 而不是传递片段实例,而是传递片段主机活动中的上下文。 建议您在Fragment.onAttach()实例化适配器,因为您确定上下文是有效的。 而且,使用

LayoutInflater.from(context);

如果要获取充气机的实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM