我是java / android的新手, 即时尝试制作片段活动并将适配器实现到我的片段&tab;' tab2'但是获取eror代码(adapter.java):
inflater =(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;
}
}
&#13;
和这段代码片段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);
}
}
&#13;
三江源
答案 0 :(得分:3)
您必须将上下文传递给适配器,以使适配器看起来像这样
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);
答案 1 :(得分:0)
data$indicator <- ifelse((as.numeric(as.POSIXct(data$event_a)) > as.numeric(as.POSIXct(data$event_b)) | is.na(data$event_b)), 1, 0)
未延长Fragment
这就是您无法致电Context
的原因。而不是传递片段实例,从片段的主机活动传递上下文。建议在getSystemService
中实例化适配器,因为您确定上下文有效。而且,使用
Fragment.onAttach()
如果你想得到一个inflater的实例。