Java listView中的addFooterView提供ClassCastException
我正在制作一个具有无限列表视图的应用程序,在开始时列表只有10个元素,但当用户滚动到最后时,它会增加10个元素,以此类推 我想在最后添加progressbar,以便在添加元素之前显示progressbar。为此,我使用了Java listView中的addFooterView提供ClassCastException,java,android,listview,android-progressbar,Java,Android,Listview,Android Progressbar,我正在制作一个具有无限列表视图的应用程序,在开始时列表只有10个元素,但当用户滚动到最后时,它会增加10个元素,以此类推 我想在最后添加progressbar,以便在添加元素之前显示progressbar。为此,我使用了addFooterView如下所示 pro = (ProgressBar)rootView.findViewById(R.id.progress); ListView lv = ((ListView)rootView.findViewById(R.id.listViewInt
addFooterView
如下所示
pro = (ProgressBar)rootView.findViewById(R.id.progress);
ListView lv = ((ListView)rootView.findViewById(R.id.listViewInternship));
lv.addFooterView(pro);
这个lv.addFooterView(pro)
给出了以下异常
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
有什么问题吗
编辑
用于查看的xml文件是
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/progress"
>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true" /></RelativeLayout>
}
我知道这很混乱,但有助于理解
提前谢谢收到了
谢谢TinTran和Jay Shah因为你得到了解决方案
问题出在
lv.addFooterView(pro)
我应该在addFooterView中添加一个视图,而不是progressbar
所以代码是
View视图=充气机。充气(R.layout.progressbar\u视图,空,假);
lv.addFooterView(视图)代码>
而不是lv.addFooterView(pro)代码>
再次感谢大家发布完整的java代码以便更好地理解。提供一些详细代码您是否动态更改任何视图的布局参数?问题可能不在您的footerview,而在其他地方。请使用调试器以便更好地理解。您是否可以添加页脚xml以及如何扩展布局进度条位置是否通过代码为某些视图设置任何边距或填充?如果是这样,发布该部分并发布xml.Yes,还可以使用getView()中的convertView参数,如果不是这样,则不会从ListView回收机制中获得任何好处。
int count = 0;
JSONParser jsonParser = new JSONParser();
public Internship() {
}
//urls of php files
private static final String url_of_showing_all_internships = "some url";
Boolean flag_loading=false;
ArrayList<DataOfInternship> internshipArrayList ;
ArrayAdapter<DataOfInternship> adapter;
ProgressBar pro ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView =inflater.inflate(R.layout.fragment_internship, container, false);
count = 1;
pro = (ProgressBar)rootView.findViewById(R.id.progress);
internshipArrayList = new ArrayList<>();
additems();
adapter = new ArrayAdapter<DataOfInternship>(getActivity() , R.layout.internship_view,R.id.titleOfInternship,internshipArrayList){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
((TextView)row.findViewById(R.id.typeOfInternship)).setText(internshipArrayList.get(position).Type);
((TextView)row.findViewById(R.id.titleOfInternship)).setText(internshipArrayList.get(position).Name);
((TextView)row.findViewById(R.id.locationOfInternship)).setText(internshipArrayList.get(position).Location);
((TextView)row.findViewById(R.id.startDateOfInternship)).setText(internshipArrayList.get(position).StartDate);
((TextView)row.findViewById(R.id.stipendOfInternship)).setText(internshipArrayList.get(position).Stipend);
((TextView)row.findViewById(R.id.durationOfInternship)).setText(internshipArrayList.get(position).Duration);
return row;
}
};
ListView lv = ((ListView)rootView.findViewById(R.id.listViewInternship));
lv.addFooterView(pro);
lv.setAdapter(adapter);
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
{
if(!flag_loading)
{
flag_loading = true;
additems();
count+=10;
}
}
}
});
return rootView;
}JSONArray internships = null;
private void additems() {
new AsyncTask<Void , Void, Void>(){
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
//making parameters for sno
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("sno" , String.valueOf(count)));
//making json object
JSONObject json = jsonParser.makeHttpRequest(url_of_showing_all_internships, "POST", parameters);
Log.e("count= "+count,json.toString());
try {
int success = json.getInt("success");
if (success ==1){
internships = json.getJSONArray("internships");
for (int i = 0 ; i < internships.length(); i++){
JSONObject temp = internships.getJSONObject(i);
//making dataobject
String title = temp.getString("internship_title")
, type = temp.getString("internship_type")
,location = temp.getString("location")
,start_date = temp.getString("start_date")
,duration = temp.getString("duration")
,stipend = temp.getString("stipend")
,description = temp.getString("dis")
;
DataOfInternship tempData = new DataOfInternship(title,type,description,"",location,stipend,start_date,duration);
internshipArrayList.add(tempData);
}
flag_loading = false;
}
else publishProgress();
} catch (JSONException e) {
Log.e("json Exception" , e.toString());
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
Toast.makeText(getActivity(),"Connection not secure",Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
adapter.notifyDataSetChanged();
}
}.execute();
}