由asyncktask和BaseAdapter实现的ListView确实出现在片段中

时间:2017-12-20 23:59:33

标签: android android-layout listview android-fragments baseadapter

我试图在片段上使用BaseAdapter和Asyncktask(从DB实现它)创建列表视图,但它没有出现错误记录或压缩

这是我的代码:

  

listclasses.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">

  <ListView
      android:id="@+id/listetud"
      android:layout_width="match_parent"
      android:layout_height="match_parent" >
  </ListView>
</LinearLayout>
  

classes.xml

单排     

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">

        <TextView
            android:id="@+id/matclass"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:drawableLeft="@drawable/schoolicn"
            android:text=" :"
            android:typeface="monospace" />

        <TextView
            android:id="@+id/profclass"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:drawableLeft="@drawable/teachericn"
            android:text="  :"
            android:typeface="monospace" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp" >

            <TextView
                android:id="@+id/dateclass"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/planicn"
                android:typeface="serif" />

            <TextView
                android:id="@+id/heurclass"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:drawableLeft="@drawable/alarmicn"
                android:typeface="serif" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp" >

            <TextView
                android:id="@+id/locclass"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/location"
                android:text=" :"
                android:typeface="serif" />

            <TextView
                android:id="@+id/priceclass"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:drawableLeft="@drawable/priceicn"
                android:text=" :"
                android:typeface="serif" />

        </LinearLayout>

    </LinearLayout>

Java代码:

  

MyAdapter.java

public final class MyAdapter extends BaseAdapter {
    private  List<Item> mItems;
    private final LayoutInflater mInflater;
    ListView ListItem;
    private Context context;


    public MyAdapter(Context context, List<Item> mItems) {
        this.context= context;
        this.mItems=mItems;

        mInflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);



    }



    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Item getItem(int i) {
        return mItems.get(i);
    }

    @Override
    public long getItemId(int i) {
       return i;

    }


    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = view;

        TextView matiere;
        TextView prof;
        TextView date;
        TextView heure;
        TextView location;
        TextView price;


        if (v == null) {
            v = mInflater.inflate(R.layout.classes, viewGroup, false);
            v.setTag(R.id.matclass, v.findViewById(R.id.matclass));
            v.setTag(R.id.profclass, v.findViewById(R.id.profclass));
            v.setTag(R.id.dateclass, v.findViewById(R.id.dateclass));
            v.setTag(R.id.heurclass, v.findViewById(R.id.heurclass));
            v.setTag(R.id.locclass, v.findViewById(R.id.locclass));
            v.setTag(R.id.priceclass, v.findViewById(R.id.priceclass));
        }


        matiere = (TextView) v.getTag(R.id.matclass);
        prof = (TextView) v.getTag(R.id.profclass);
        date = (TextView) v.getTag(R.id.dateclass);
        heure = (TextView) v.getTag(R.id.heurclass);
        location = (TextView) v.getTag(R.id.locclass);
        price = (TextView) v.getTag(R.id.priceclass);

         Item item = getItem(i);


        matiere.setText(item.matiere);
        prof.setText(item.prof);
        date.setText(item.date);
        heure.setText(item.heure);
        location.setText(item.location);
        price.setText(item.price);

         ListItem = (ListView) v.findViewById(R.id.listetud);


        return v;
    }

    public static class Item {
        public final String matiere;
        public final String prof;
        public final String date;
        public final String heure;
        public final String location;
        public final String price;



        Item(String matiere, String prof,String date,String heure,String location,String price) {
            this.matiere = matiere;
            this.prof = prof;
            this.date = date;
            this.heure = heure;
            this.location = location;
            this.price = price;



        }
    }
  

ClassesLayout

public class ClassesLayout extends Fragment {

    View view;
    ListView list;
    private  List<MyAdapter.Item> mItems  = new ArrayList<MyAdapter.Item>();

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        view = inflater.inflate( R.layout.listclasses, null);


        new GetClasses().execute();

        return view;


    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);


    }

    class GetClasses extends AsyncTask<Void, Void, Void> {
        JSONParser jsonParser = new JSONParser();
        private static final String TAG_SUCCESS = "success";
        private String URL_CLASSES = "http://prof-finder.aba.ae/classes.php";





        @Override
        protected Void doInBackground(Void... arg0) {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            JSONObject jsonObj = jsonParser.makeHttpRequest(URL_CLASSES,
                    "GET", params);
            // String json = jsonParser.makeServiceCall(URL_CATEGORIES, ServiceHandler.GET);

            Log.e("Create log", jsonObj.toString());

            try {
                int success = jsonObj.getInt(TAG_SUCCESS);
                Log.e("Response: ", "> " + success);
                // JSONObject jsonObj = new JSONObject(json);
                if (jsonObj != null) {
                    JSONArray classes = jsonObj
                            .getJSONArray("classe");
                    Log.e("Create log", classes.toString());

                    for (int i = 0; i < classes.length(); i++) {
                        JSONObject clasObj = (JSONObject) classes.get(i);
                        mItems.add(new MyAdapter.Item(clasObj.getString("matiere"),clasObj.getString("prof"),clasObj.getString("date"),clasObj.getString("heure"),clasObj.getString("adresse"),clasObj.getString("price")));
                    }
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }


            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            MyAdapter adapter = new MyAdapter(view.getContext(), mItems);
            list = (ListView) view.findViewById(R.id.listetud);
            list.setAdapter(adapter);



// get data from the table by the ListAdapter


        }

    }


}

我用它在我的活动中调用片段 它适用于其他片段

 fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_content,new ClassesLayout() , "Accueil")
                .addToBackStack(null)
                .commit();

我真的花了一周时间来搜索问题,我尝试了很多方法来做到这一点,但没有任何结果

2 个答案:

答案 0 :(得分:0)

尝试

@Override
public int getCount() {
    return mItems.size();
}

您需要告诉adapter List中有多少件物品。

答案 1 :(得分:0)

试试这个

 @Override
 public int getCount() {
    return mItems.size();
 }