Android:列表未传递给RecyclerView
我正在将一个值从Android:列表未传递给RecyclerView,android,json,google-maps,android-volley,Android,Json,Google Maps,Android Volley,我正在将一个值从MainActivity.class传递到此片段ResultFrag.class。在这个类中,它应该显示用户当前位置请求值范围内的位置 返回的json是正确的 我还试图通过Logcat调试并显示myList中的项目,结果很好。这意味着json被正确解析,并被添加到myList myAdapter = new MyAdapter(getActivity(), getTheList()); 将列表传递给自定义适配器的特定行;我不认为它是从getTheList()方法获取列表的。因为
MainActivity.class
传递到此片段ResultFrag.class
。在这个类中,它应该显示用户当前位置请求值范围内的位置
返回的json
是正确的
我还试图通过Logcat调试并显示myList
中的项目,结果很好。这意味着json
被正确解析,并被添加到myList
myAdapter = new MyAdapter(getActivity(), getTheList());
将列表传递给自定义适配器的特定行;我不认为它是从getTheList()
方法获取列表的。因为我尝试使用以下代码进行调试,将其放入onCreateView
中,但没有记录任何内容:
for (int b = 0; b < getTheList().size(); b++) {
Log.d("list: ", Integer.toString(b) + " : " + getTheList().get(b).getPlace());
}
这段时间你修好了吗?我看到的是,您实际上在适配器和片段之间共享列表。在构建适配器之后,您可以对列表进行更改(添加项)。但不在适配器上调用notfyDatasetChanged()。将更改应用到列表后,添加该调用
JSONArray arr = new JSONArray(response);
for (int i = 0; i < arr.length(); i++) {
JSONObject obj = arr.getJSONObject(i);
GetterSetter getterSetter = new GetterSetter();
getterSetter.setId(obj.getString("id"));
getterSetter.setPlace(obj.getString("name"));
getterSetter.setDistance(obj.getInt("distance"));
myList.add(getterSetter);
}
myAdapter.notfyDatasetChanged()
JSONArray arr=新的JSONArray(响应);
对于(int i=0;i
您应该共享MyAdapter类的代码。@HermannKlecker我添加了MyAdapter类。而for b循环loes没有记录任何内容?response
看起来怎么样?@HermannKlecker当b循环位于onCreateView
中时,它不会记录任何内容。但是当它在searchPLace()
方法中时,它会记录一些东西,这意味着json解析正在工作。只是它没有将列表传递给在onCreateView
中初始化的适配器。响应返回也是正确的。只是它没有将列表传递给适配器。我在想这和修饰语或其他东西有关。。我自己也不确定。经过几天的努力,我终于解决了这个问题。我更改了一些代码,并在适配器中添加了notifyDataSetChanged()
方法。它正在工作。谢谢我接受这个答案:)
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.Collections;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
List<GetterSetter> data = Collections.emptyList();
private LayoutInflater layoutInflater;
private Context context;
public MyAdapter (Context context, List<GetterSetter> data) {
this.context = context;
this.data = data;
layoutInflater = layoutInflater.from(context);
}
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.mylist, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {
// Get event data
GetterSetter current = data.get(position);
holder.id.setText(current.getId());
holder.place.setText(current.getPlace());
holder.distance.setText("Distance: " + String.valueOf(current.getDistance()) + " km");
}
@Override
public int getItemCount() {
return data.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView id;
TextView place;
TextView distance;
public MyViewHolder(View itemView) {
super(itemView);
id = (TextView) itemView.findViewById(R.id.placeId);
place = (TextView) itemView.findViewById(R.id.name);
distance = (TextView) itemView.findViewById(R.id.distance);
}
}
}
JSONArray arr = new JSONArray(response);
for (int i = 0; i < arr.length(); i++) {
JSONObject obj = arr.getJSONObject(i);
GetterSetter getterSetter = new GetterSetter();
getterSetter.setId(obj.getString("id"));
getterSetter.setPlace(obj.getString("name"));
getterSetter.setDistance(obj.getInt("distance"));
myList.add(getterSetter);
}
myAdapter.notfyDatasetChanged()