【问题标题】:Android: Refresh a Gridview by SpinnerAndroid:通过 Spinner 刷新 Gridview
【发布时间】:2014-10-07 22:55:50
【问题描述】:

背景:

我正在研究一个图像网格视图,应用程序将首先加载到所选类别(整数)中,以生成相应的图像 url 数组列表,然后将图像拟合到网格视图。

此外,操作栏中有一个微调器,列出了图像类别,我想以一种方式实现,即 gridview 将根据微调器中选择的类别进行刷新。

代码:

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
    default_category = Constants.gridview_category_chosen; // integer
    generate_array(default_category); // to generate the array of image urls to load to adapter 
    ....
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    View rootView = inflater.inflate(R.layout.fr_image_grid, container, false);
    listView = (GridView) rootView.findViewById(R.id.grid);
    _ImageAdapter = new ImageAdapter();
    ((GridView) listView).setAdapter(_ImageAdapter);
    ....
 }

@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) 
{
    Constants.custom_toast(getActivity(), ""+itemPosition+"   "+itemId, "");
    Constants.gridview_category_chosen = itemPosition;
    default_category = Constants.gridview_category_chosen; 
    generate_array(default_category);
    _ImageAdapter.notifyDataSetChanged();       
    listView.setAdapter(new ImageAdapter());
    return false;
}

Logcat:

10-07 22:22:48.711: W/dalvikvm(13464): threadid=1: thread exiting with uncaught exception (group=0x41d17700)
10-07 22:22:48.721: E/AndroidRuntime(13464): FATAL EXCEPTION: main
10-07 22:22:48.721: E/AndroidRuntime(13464): java.lang.ArrayIndexOutOfBoundsException: length=44; index=44
10-07 22:22:48.721: E/AndroidRuntime(13464):    at com.abc.app.fragment.ImageGridFragment.generate_array(ImageGridFragment.java:91)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at com.abc.app.fragment.ImageGridFragment.onNavigationItemSelected(ImageGridFragment.java:165)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at com.android.internal.widget.ActionBarView$1.onItemSelected(ActionBarView.java:235)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at android.widget.AdapterView.fireOnSelected(AdapterView.java:899)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at android.widget.AdapterView.access$200(AdapterView.java:50)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:863)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at android.os.Handler.handleCallback(Handler.java:730)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at android.os.Looper.loop(Looper.java:137)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at android.app.ActivityThread.main(ActivityThread.java:5493)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at java.lang.reflect.Method.invokeNative(Native Method)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at java.lang.reflect.Method.invoke(Method.java:525)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
10-07 22:22:48.721: E/AndroidRuntime(13464):    at dalvik.system.NativeStart.main(Native Method)

问题:

onNavigationItemSelected 循环中之前没有任何内容。在上面代码中添加内容后,出现logcat中的错误。

目前图像 url 中有 44 张图像(即,每个 logcat 似乎会再次生成数组列表使其成为 ArrayIndexOutOfBoundsException?)

我研究了Refresh GridView contents with custom BaseAdapterclear a custom adapter 或类似的,但仍然有同样的问题。 怎么可能修改?提前致谢!

【问题讨论】:

    标签: android gridview spinner invalidation


    【解决方案1】:

    java.lang.ArrayIndexOutOfBoundsException: 长度=44;索引=44

    索引从 0 开始,因此您可以达到的最大值为 43。0 到 43 使您的数据集中有 44 个元素。我猜你的微调器显示数字从 1 到 44 ?

    我想以网格视图刷新的方式实现 在微调器中选择的类别。

    无法使用findViewById() 检索ActionBar 中的项目。您需要像这样在onCreateOptionsMenu() 中检索它们:

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.sort_spinner, menu);
        MenuItem spinnerItem = menu.findItem(R.id.menuid);
        Spinner spinner = (Spinner)spinnerItem.getActionView().findViewById(R.id.spinner);
        //Your rest of code... 
        return super.onCreateOptionsMenu(menu);
    }   
    

    来源:Get reference to a Spinner in ActionBar

    在您获得对 Spinner 的引用后,添加 onItemSelectedListener 以侦听 Spinner 上的任何项目点击。

    【讨论】:

    • 非常感谢您的及时回复。更详细的,有 44 张图片,每张图片都有一个类别,只有 20 个类别。对于 ActionBar,我有 implements ActionBar.OnNavigationListener 其中代码响应中的 onNavigationItemSelected
    • 所有作品都可以完美执行,无需在 actionBar 中使用 Spinner。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    相关资源
    最近更新 更多