自定义微调器不调用自定义列表视图?

时间:2014-11-10 23:20:05

标签: android listview android-listview spinner getview

我有一个自定义列表视图和微调器。首先我填写列表视图然后我点击下拉式微调器。我选择一个项目(城市)。我想用新结果更新列表视图。但是我可以自定义适配器getview不是调用。因此listview不会更新。这是我的屏幕enter image description here

我该怎么做?

我在这里填充微调器

private void getCityListWithSpinner() {

        cityListRequest = new CityListRequest(new AsyncListener() {

            @Override
            public void asyncOperationSucceded(Object obj, int queue) {

                System.out.println("Objemizzz " + obj.toString());

                cityArrayList = (ArrayList<CityList>) obj;
                Spinner ss = (Spinner) findViewById(R.id.cityfilmspinner);

                CinemaCitySelector2 citySelector = new CinemaCitySelector2();
                cityList.add("Seçiniz");
                for (int i = 0; i < cityArrayList.size(); i++) {
                    cityList.add(cityArrayList.get(i).getCinemaCity());
                    citySelector.CinemaCitySelector2(
                            CinemaCityMoviePickerActivity.this, ss, cityList,2);

                }

            }

CinemaCitySelector:

public class CinemaCitySelector2 implements OnItemSelectedListener {

    Context context2;
    Spinner spinner2;
    CityListInCityRequest cityListInCityRequest2;
    ArrayList<Cinema> cityListInCityArrayList2;
    ListView list_cinema_movie_selectorr2;
    CinemaListViewAdapter2 adapter2;
    View row2;
    int act2 = 0;

    Spinner cityspinner;

    public void CinemaCitySelector2(Context context, Spinner spinner,
            ArrayList<String> cityList, int activityfrom) {

        this.context2 = context;
        this.spinner2 = spinner;
        act2 = activityfrom;

        // Declaring an Adapter and initializing it to the data pump
        ArrayAdapter adapter = new ArrayAdapter(context,
                android.R.layout.simple_list_item_1, cityList);

        // Setting Adapter to the Spinner
        spinner.setAdapter(adapter);

        // Setting OnItemClickListener to the Spinner
        spinner.setOnItemSelectedListener(CinemaCitySelector2.this);

    }

    // Defining the Callback methods here
    public void onItemSelected(AdapterView parent, View view, int pos, long id) {

        String city = spinner2.getItemAtPosition(pos).toString();


            LayoutInflater layoutInflater = LayoutInflater.from(context2);
            row2 = layoutInflater.inflate(
                    R.layout.activity_cinemacitymoviepicker, null, false);
            list_cinema_movie_selectorr2 = (ListView) row2
            .findViewById(R.id.listfilmincinema);


        if (!city.equals("Seçiniz")) {

            cityListInCityRequest2 = new CityListInCityRequest(
                    new AsyncListener() {

                        @Override
                        public void asyncOperationSucceded(Object obj, int queue) {

                            // adapter.clear();
                            // adapter.notifyDataSetChanged();
                            // list_cinema_movie_selector.setAdapter(adapter);
                            System.out.println("Objemizzz " + obj.toString());

                            cityListInCityArrayList2 = (ArrayList<Cinema>) obj;
                            // adapter.notifyDataSetChanged();
                            adapter2 = new CinemaListViewAdapter2(context2,
                                    R.layout.cinema_list,
                                    cityListInCityArrayList2);

                                list_cinema_movie_selectorr2
                                        .setAdapter(adapter2);



                        }

                        @Override
                        public void asyncOperationFailed(Object obj, int queue) {
                            // TODO Auto-generated method stub
                            System.out.println("Objemizzz2 " + obj.toString());

                        }
                    }, city);
        }
    }

    public void onNothingSelected(AdapterView arg0) {
        // TODO Auto-generated method stub

    }

}

CinemaListViewAdapter2:

public class CinemaListViewAdapter2 extends ArrayAdapter<Cinema> {

    Context context;
    int arraycount=0;



    public CinemaListViewAdapter2(Context context, int resourceId,
            ArrayList<Cinema> items) {
        super(context, resourceId, items);
        this.context = context;
        arraycount=items.size();
    }

    /*private view holder class*/
    private class ViewHolder {
        BlackBrandTextview cinemaName;
        RelativeLayout cinemalist;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        Cinema rowItem = getItem(position);


        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.cinema_list, null);
            holder = new ViewHolder();
            holder.cinemaName = (BlackBrandTextview) convertView.findViewById(R.id.txt_cinema_name);
            holder.cinemalist=(RelativeLayout)convertView.findViewById(R.id.cinemalist);
            holder.cinemaName.setText(rowItem.getCinemaName());
            if(rowItem.getCinemaDistance()<5000){

                holder.cinemalist.setBackgroundColor(context.getResources().getColor(R.color.Cinema_Pink));
                holder.cinemaName.setTextColor(context.getResources().getColor(R.color.Cinema_Black));

            }
            else{
                holder.cinemalist.setBackgroundColor(context.getResources().getColor(R.color.Cinema_Black));
                holder.cinemaName.setTextColor(context.getResources().getColor(R.color.White));

            }

            convertView.setTag(holder);
        } else{
            holder = (ViewHolder) convertView.getTag();

            holder.cinemaName.setText(rowItem.getCinemaName());


        }

        if(rowItem.getCinemaDistance()<5000){

            holder.cinemalist.setBackgroundColor(context.getResources().getColor(R.color.Cinema_Pink));
            holder.cinemaName.setTextColor(context.getResources().getColor(R.color.Cinema_Black));

        }
        else{
            holder.cinemalist.setBackgroundColor(context.getResources().getColor(R.color.Cinema_Black));
            holder.cinemaName.setTextColor(context.getResources().getColor(R.color.White));

        }


        holder.cinemaName.setText(rowItem.getCinemaName());  

        return convertView;
    }

2 个答案:

答案 0 :(得分:1)

一旦选择了微调器上的项目,我就创建了一个更新适配器的方法:

cityspinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
        city = (String) parent.getItemAtPosition(position);
        resetCinema(city); //or onRestart();
}

public void onNothingSelected(AdapterView<?> parent){
}
}); 

resetCinema(city)根据城市价值重新生成视图。您可以手动执行此操作:

public void resetCinema(String city) {
    //show list view elements depending on city
}

或者只是调用整个Activity的刷新:

protected void onRestart() {
  Intent refresh = new Intent(this, Main.class);
  startActivity(refresh);//Start the same Activity
  finish(); //finish Activity.
}

答案 1 :(得分:0)

我建议你致电

adapter2.notifyDataSetChange();

但无论如何,每次都不需要初始化新的适配器。 你应该在适配器中创建一个方法,如下所示:

public void setMyArray(ArrayList<Cinema> items) {
    myArray.clear();
    myArray.addAll(items);
    notifyDataSetChange();
}
相关问题