gpt4 book ai didi

android - 自定义适配器从 fragment 获取空上下文

转载 作者:搜寻专家 更新时间:2023-11-01 07:50:09 25 4
gpt4 key购买 nike

我正在使用选项卡布局。我正在从实时数据库获取数据以在 ListView 中显示信息。为此,我正在使用 CustomAdapter。 arraylist 中的值正在正确获取。一旦您将 Arraylist 数据传递给 CustomAdapter,然后 Context 获取空异常。如何将 Fragment 的上下文传递给自定义适配器。

自定义适配器构造函数

/**Here in Constructor, context getting null value. App Crashing*/
public HotelCustomAdapter(Context hotelMaster, int textViewResourceId,ArrayList<GetSetOffers> hotelLists) {
super(hotelMaster,textViewResourceId, hotelLists);
hotelList=hotelLists;
context=hotelMaster;
inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

已编辑:

fragment

从 fragment 中我调用 AsyncTask 类以从云端获取数据。从 postExecute 我将 Arraylist 传递给 fragment 方法。此时上下文为空。如何解决这个问题。

fragment 类

public class OneFragment extends Fragment implements View.OnClickListener{
View view;
Button ok;
TextView text;
public ListView list;
HotelCustomAdapter hca;
ArrayList<GetSetOffers> temp;
Context context;
public OneFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ScrollView scroller = new ScrollView(getActivity());

view = inflater.inflate(R.layout.fragment_one, container, false);
ok = (Button) view.findViewById(R.id.ok);
text = (TextView)view.findViewById(R.id.text);
list = (ListView) view.findViewById(R.id.list);
ok.setOnClickListener(this);
context=view.getContext(); // Here the context is assigned
new AsyncHotel(getActivity()).execute("19");
return view;
}

//After the value got from postExecute, it was showing null to the context
public void getAdapterView(ArrayList<GetSetOffers> hotelList){
//temp=hotelList;
hca=new HotelCustomAdapter(context,R.layout.hotel_custom_listview,hotelList);
list.setAdapter(hca);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ok:
text.setText("Y You Clicked.?");
//hca=new HotelCustomAdapter(getActivity(),R.layout.hotel_custom_listview,temp);
//list.setAdapter(hca); // tried this
break;
}
}

}

postExecute() 方法

@Override
protected void onPostExecute(String result) {
try {
root = new JSONObject(result);
validation = root.getInt("response");
JSONArray data = root.getJSONArray("data");

if (validation == 1) {
for (int i = 0; i < data.length(); i++) {
hgs = new GetSetOffers();
hgs.setOfferTitle(data.getJSONObject(i).getString("hotel_name"));
hgs.setOfferDescrip(data.getJSONObject(i).getString("city"));
hgs.setOfferToDt(data.getJSONObject(i).getString("hotel_name"));

hotelList.add(hgs);
}
OneFragment one=new OneFragment(); // I think here I am doing wrong
one.getAdapterView(hotelList);
}
} catch (JSONException e) {
e.printStackTrace();
}
}

我认为将值从 AsyncTask postExecute 方法传递给 Fragment 是错误的。同样, fragment 上下文为空。

上下文是全局声明的。在调用 AsyncTask 类之前,上下文变量已分配给 Activity。该 Fragment 上下文现在有值(value)。 AsyncTask 类完成其任务,然后通过在 postExecute() 方法中为该 fragment 创建新对象并在将该列表传递给自定义数组适配器之前将列表传递给 fragment ,并且上下文为空。请看图片。

enter image description here

我再次尝试将接收到的列表分配给 Fragment 中的全局变量。然后在单击按钮后,我尝试将列表传递给自定义阵列适配器。现在上下文有值并且列表更改为空,即使该列表已分配给全局变量

最佳答案

因为这样的问题,我开始这样做:

        @Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
...
}

关于android - 自定义适配器从 fragment 获取空上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35874288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com