java - Android 访问隐藏字段 Landroid/widget/AbsListView;->mIsChildViewEnabled:Z(灰名单,反射,允许)
问题描述
我正在尝试使用来自 API 的数据填充微调器。但是,当我尝试打开微调器时,遇到以下错误:Android Accessing hidden field Landroid/widget/AbsListView;->mIsChildViewEnabled:Z (greylist, reflection, allowed)
我将微调器放在一个片段中,并在我的 main_activity 中使用这个片段:
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ProgressBar;
import android.widget.Spinner;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.booij.mydogapplication.R;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Array;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
public class SearchbarFragment extends Fragment
{
private URL _url;
private Spinner _spinner;
private ArrayList<String> _breedList;
public SearchbarFragment()
{
// Required empty public constructor
try
{
_url = new URL("https://dog.ceo/api/breeds/list/all");
_breedList = new ArrayList<>();
} catch (MalformedURLException e)
{
e.printStackTrace();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_searchbar, container, false);
_spinner = view.findViewById(R.id.breedDropdown);
setSpinnerList();
_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
Log.e("myInfo", String.valueOf(position));
Log.e("myInfo", _breedList.get(position));
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_searchbar, container, false);
}
private void setSpinnerList()
{
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, _url.toString(), null,
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response)
{
try
{
JSONObject breeds = new JSONObject(response.getString("message"));
_breedList.add("");
Iterator<String> iterator = breeds.keys();
while (iterator.hasNext())
{
String key = iterator.next();
_breedList.add(key);
}
ArrayAdapter<String> adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, _breedList.toArray());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
_spinner.setAdapter(adapter);
//spinner.setSelection(0);
}
catch (JSONException jsonException)
{
jsonException.printStackTrace();
}
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
error.printStackTrace();
}
});
RequestQueue queue = Volley.newRequestQueue(getActivity());
queue.add(jsonObjectRequest);
}
}
我究竟做错了什么?如果我需要提供额外的详细信息,请告诉我。提前致谢
解决方案
我注意到onCreateView
两次膨胀片段布局,而不是返回用于设置微调器的视图。这可能是问题所在。我建议进行此更改:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_searchbar, container, false);
_spinner = view.findViewById(R.id.breedDropdown);
setSpinnerList();
_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
Log.e("myInfo", String.valueOf(position));
Log.e("myInfo", _breedList.get(position));
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
// Inflate the layout for this fragment
return view <---- Return the view, rather than inflate another view.
}
推荐阅读
- sql - SQL Developer 更改特定列的日期格式
- javascript - 不确定这种格式的含义
- javascript - 如何正确使用 Firestore
- sql - Google Bigquery,获取特定时区一周的开始和结束
- linux - 结合linux中的几个“find”命令
- google-maps - xamarin:如何处理图像点击谷歌地图信息窗口在android中点击
- elm - 这个 `div` 调用产生: Html (String -> Msg) 但是 `view` 上的类型注释说它应该是: Html Msg
- c++ - 我的最大二进制堆中的 C++ 轮询操作工作非常缓慢
- matlab - 如何用 for 循环的答案填充零向量?
- c# - 调试 Akka.NET 远程连接(无法连接 - 绑定失败)