【问题标题】:How on filter with spinner, setOnItemSelected in fragment如何使用微调器进行过滤,片段中的 setOnItemSelected
【发布时间】:2014-05-26 03:32:32
【问题描述】:

我有listfragmentcursor adapter,我想为列表视图制作filter(任务,今天,本周,....(不同仅在选择数据库中,程序相同))我有一个问题。

如何在spinner.setOnItemSelected() 中管理光标适配器?当我尝试在switchsetOnItemSelected 中用cursor 填充adapter 时,我有很多错误。我不知道如何写一个function,然后从spinner 中选择后,我的listview 将更新为新的选择。这个setOnItemSelected 函数正在运行,但是我如何更改log.v .... 以使用其他adapter 填充selects 的方法

public class PredmetFragment extends Fragment {

private DatabaseOp mDbHelper;
String username;
ListView listview;
View view;
TextView empty;
PredmetCursorAdapter adapter;

int item;
Spinner spinner;
Cursor predmetCursor;

public PredmetFragment() {
    // TODO Auto-generated constructor stub
    setRetainInstance(true);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    view = inflater.inflate(R.layout.predmet_frag, container, false);

    listview = (ListView) view.findViewById(R.id.listPredmet);
    empty = (TextView)view.findViewById(R.id.empty);
    spinner = (Spinner)view.findViewById(R.id.p_spinner);

    mDbHelper = new DatabaseOp(getActivity());
    mDbHelper.open();

    showUserSettings(); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
    {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
        {
            item = parent.getSelectedItemPosition();

            switch (item)
            {
            case 0:
                Log.v ("Predmet item:", Integer.toString(item));
                predmetCursor = mDbHelper.fetchAllPredmet(username, 1);
                break;
            case 1:
                Log.v ("Predmet item:", Integer.toString(item));
                predmetCursor = mDbHelper.fetchAllPredmet1(username, 1);
                break;
            case 2:
                Log.v ("Predmet item:", Integer.toString(item));
                predmetCursor = mDbHelper.fetchAllPredmet2(username, 1);
                break;
            case 3:
                Log.v ("Predmet item:", Integer.toString(item));
                predmetCursor = mDbHelper.fetchAllPredmet3(username, 1);
                break;
            case 4:
                Log.v ("Predmet item:", Integer.toString(item));
                predmetCursor = mDbHelper.fetchAllPredmet4(username, 1);
                break;
            case 5:
                Log.v ("Predmet item:", Integer.toString(item));
                predmetCursor = mDbHelper.fetchAllPredmet5(username, 1);
                break;
            }
        }

        public void onNothingSelected(AdapterView<?> parent) 
        {

        }
    });

    final PredmetCursorAdapter adapter = new PredmetCursorAdapter(getActivity(), predmetCursor);
    listview.setAdapter(adapter);

    if (listview.getCount()==0)
    {
        empty.setVisibility(View.VISIBLE);
    } else {
        empty.setVisibility(View.GONE);
    }

    listview.setOnItemClickListener(new OnItemClickListener() 
    {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int stlpec, long arg3) 
        {
            // TODO Auto-generated method stub
            Cursor cur = (Cursor) adapter.getItem(stlpec);
            String odosli = cur.getString(cur.getColumnIndex("_id"));

            Intent intent = new Intent(getActivity(),PredmetShowerActivity.class);
            intent.putExtra(PredmetShowerActivity.ODOSLI, odosli);

            adapter.notifyDataSetChanged();

            startActivityForResult(intent, 222);
            //Toast.makeText(getActivity(), odosli, Toast.LENGTH_SHORT).show();

        }
    });

    return view;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    mDbHelper.open();
    PredmetCursorAdapter adapter__ = (PredmetCursorAdapter)listview.getAdapter();

    Cursor predmetCursor = mDbHelper.fetchAllPredmet(username, 1);
    adapter__.changeCursor(predmetCursor);
    adapter__.notifyDataSetChanged();
}

@Override
public void onResume() 
{
    super.onResume();

    mDbHelper.open();
    PredmetCursorAdapter adapter__ = (PredmetCursorAdapter)listview.getAdapter();

    Cursor predmetCursor = mDbHelper.fetchAllPredmet(username, 1);

    if (predmetCursor.getCount()==0)
    {
        empty.setVisibility(View.VISIBLE);
    } else {
        empty.setVisibility(View.GONE);
    }

    adapter__.changeCursor(predmetCursor);
    adapter__.notifyDataSetChanged();
}

@Override
public void onPause() 
{
    super.onPause();
    mDbHelper.close();
}

public static PredmetFragment newInstance() {

    PredmetFragment f = new PredmetFragment();
    return f;
}

private void showUserSettings() 
{
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity());

    username = sharedPrefs.getString("prefUsername", "NULL");
}

}

【问题讨论】:

  • 你可以直接放switch(pos)。如果有的话,发布你的日志猫错误
  • 这没关系,但我需要切换到完全填充光标适配器,我不知道如何,总是向我展示一个没有 switch 语句的整个任务
  • 你的意思是从微调器中选择一个项目后你需要在列表视图中加入蟾蜍吗??
  • 是的,选择后,我需要用其他选择的数据重新加载列表视图

标签: android listview spinner adapter android-cursor


【解决方案1】:

你可以这样做

List<string> list=new arraylist<String>();
list.add(yourselectedSpinneritem);
ArrayAdapter adapter=new Arrayadapter(this,layout,list);
adapter.notifyDataSetChanged();
listview.setadapetr(adapter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多