Im new in java/android, im trying make fragment activity and implement adapter into my fragment 'tab2' but getting eror code in line(adapter.java) :
我是java / android的新手,我正在尝试使用片段活动并在我的片段'tab2'中实现适配器,但是在行中获取了错误代码(adapter.java):
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater =(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
im already trying to fix. but still cant resolve this. So, what is wrong in my code? this my full code adapter.java :`
我已经尝试修复了。但仍然无法解决这个问题。那么,我的代码有什么问题?这是我的完整代码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;
}
}
and this code fragment tab2.java :
和这段代码片段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);
}
}
Thankyou
2 个解决方案
#1
3
You have to pass the context to your adapter so your adapter should look like this
您必须将上下文传递给适配器,以便适配器看起来像这样
private Context context;
public Adapter(Context context, List<Data> items) {
this.context=context
this.items = items;
}
and use this context like this
并使用这样的上下文
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
and send context from your fragment like this
并像这样从你的片段发送上下文
Adapter adapter=new Adapter(getActivity(),listItems);
#2
0
Fragment
does not extend Context
that is why you cannot call getSystemService
. Instead of passing the fragment instance, pass the context from the fragment's host activity. It is advisable to instantiate the Adapter in Fragment.onAttach()
since you are sure that the context is valid. And also, use
Fragment没有扩展Context,这就是为什么你不能调用getSystemService。而不是传递片段实例,从片段的主机活动传递上下文。建议在Fragment.onAttach()中实例化适配器,因为您确定上下文有效。而且,使用
LayoutInflater.from(context);
if you want to get an instance of the inflater.
如果你想得到一个inflater的实例。
#1
3
You have to pass the context to your adapter so your adapter should look like this
您必须将上下文传递给适配器,以便适配器看起来像这样
private Context context;
public Adapter(Context context, List<Data> items) {
this.context=context
this.items = items;
}
and use this context like this
并使用这样的上下文
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
and send context from your fragment like this
并像这样从你的片段发送上下文
Adapter adapter=new Adapter(getActivity(),listItems);
#2
0
Fragment
does not extend Context
that is why you cannot call getSystemService
. Instead of passing the fragment instance, pass the context from the fragment's host activity. It is advisable to instantiate the Adapter in Fragment.onAttach()
since you are sure that the context is valid. And also, use
Fragment没有扩展Context,这就是为什么你不能调用getSystemService。而不是传递片段实例,从片段的主机活动传递上下文。建议在Fragment.onAttach()中实例化适配器,因为您确定上下文有效。而且,使用
LayoutInflater.from(context);
if you want to get an instance of the inflater.
如果你想得到一个inflater的实例。