如何从网格视图值 [英] How to get values from grid view

查看:106
本文介绍了如何从网格视图值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有editTexts在其个人观点一个gridview。我想保存在每个editTexts的,因为它们是当我切换到另一个片段或preSS home键dissapearing的价值观,让我怎么做呢?

I have a gridview with editTexts as the individual views in it. I want to save the values that are in each of the editTexts because they are dissapearing when I switch to another fragment or press the home button, so how do I do that?

,我需要一个数组或数组列表保存所有的意见呢?我该如何获得意见,如果我这样做?

Would I need an array or arraylist that holds all of the views? How would I get the views if I did that?

fragment_score_red.xml

fragment_score_red.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RedScorerFragment"
     >

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    >


    <TextView 
        android:id="@+id/gridLabel__red"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:text="@string/grid_label__red"
        android:background="@color/white"
        android:paddingTop="5dp"
        />
    <GridView
        android:id="@+id/gridViewRed"
        android:layout_width="wrap_content"
        android:layout_height="350dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/gridLabel__red"
        android:columnWidth="40dp"
        android:numColumns="3"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="7dp"
        android:gravity="center"
        android:background="@color/white"

        >

    </GridView>


</RelativeLayout>

</ScrollView>

RedScorerFragment.java

RedScorerFragment.java

import com.actionbarsherlock.app.SherlockFragment;

import android.content.Context;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;

import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;

public class RedScorerFragment extends SherlockFragment {

    LayoutInflater infl;
    GridView mGrid;

    EditText mText;

    int R1C1, R1C2, R1C3;

    View tView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        infl = inflater;
        //super.onCreate(savedInstanceState);
        View mView = inflater.inflate(R.layout.fragment_score_red, container, false);
        mGrid = (GridView) mView.findViewById(R.id.gridViewRed);

        tView = container.getRootView();


        final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mView.getApplicationWindowToken(), 0);

        /*mGrid.setOnTouchListener(new OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event){
                if(event.getAction() == MotionEvent.ACTION_MOVE)
                    return true;
                return false;
            }
        });*/

        if(savedInstanceState != null)
        {
            R1C1 = savedInstanceState.getInt("R1C1");
            R1C2 = savedInstanceState.getInt("R1C2");
            R1C3 = savedInstanceState.getInt("R1C3");

            Log.d("savedd R1C1 ", String.valueOf(R1C1));
            Log.d("savedd R1C2 ", String.valueOf(R1C2));
            Log.d("savedd R1C3 ", String.valueOf(R1C3));
        }


        mGrid.setAdapter(new ImageAdapter(getActivity()));
        return mView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);

        if(savedInstanceState != null)
        {
            R1C1 = savedInstanceState.getInt("R1C1", 0);
            R1C2 = savedInstanceState.getInt("R1C2", 0);
            R1C3 = savedInstanceState.getInt("R1C3", 0);

            Log.v("saved R1C1 ", String.valueOf(R1C1));
            Log.v("saved R1C2 ", String.valueOf(R1C2));
            Log.v("saved R1C3 ", String.valueOf(R1C3));
        }

        //Log.v("saved R1C1 ", String.valueOf(R1C1));
        //Log.v("saved R1C2 ", String.valueOf(R1C2));
        //Log.v("saved R1C3 ", String.valueOf(R1C3));
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState){
        super.onSaveInstanceState(savedInstanceState);

        //for(int i=0;i<mGrid.getChildCount(); i++)
        Log.v("Saving", String.valueOf(mGrid.getAdapter().getItem(0)));

        //Log.v("Saving", mGrid.getItemAtPosition(2).toString());
        Integer temp = (Integer) mGrid.getAdapter().getItem(0);
        int temp2;
        if(temp != null)
        {
            temp2 = temp;
            Log.v("temp2", String.valueOf(temp2));
            savedInstanceState.putInt("R1C1", temp2);
        }
        else
            Log.v("temp2", "Temp was null");

        mText = (EditText)tView.findViewById(R.id.weightedRed__red);
        Log.d("weighted Red", mText.getText().toString() );

        EditText oText = (EditText)tView.findViewById(R.id.grid_item_edit_text_red);
        Log.d("red edit text", oText.getText().toString() );

        EditText lText = (EditText)tView.findViewById(R.id.grid_item_edit_text_blue);
        Log.d("blue edit text", lText.getText().toString() );

        //savedInstanceState.putInt("R1C2", (Integer) mGrid.getAdapter().getItem(4) );
        //savedInstanceState.putInt("R1C3", (Integer) mGrid.getAdapter().getItem(2) );

    }

    public class ImageAdapter extends BaseAdapter{

        Context context;

        public ImageAdapter(Context context)
        {
            this.context = context;
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View myView = convertView;
            //LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            if(convertView == null)
            {
                LayoutInflater li = infl;
                myView= li.inflate(R.layout.grid_items, null);

                EditText editText = (EditText) myView.findViewById(R.id.grid_item_edit_text_red);
            }

            return myView;
        }

        @Override
        public int getCount() {
            return 9;//only 9 
        }

        @Override
        public Object getItem(int position) {

            return null;
        }

        @Override
        public long getItemId(int position) {

            return 0;
        }


    }


}

我试图改变获取项方法

I tried changing the get Item method to

            @Override
        public Object getItem(int position) {

            return mGrid.getItemAtPosition(position);
        }

但现在它崩溃的时候我preSS home键,我得到一个堆栈溢出错误

but now it crashes when I press the home button and i get a stack overflow error

推荐答案

除了 TextWatchers ,你可以简单地所有的Editexts当您添加到一个数组,然后需要从他们的文字,你可以简单地循环遍历数组和呼叫的getText()的toString(); 上所有的人

In addition to TextWatchers, you could simply add all your Editexts to an array, and then when you need your text from them, you could simply cycle through the array and call getText().toString(); on all of them.

public class ImageAdapter extends BaseAdapter{

    Context context;
    EditText[] etCollection = new EditText[getCount()];

    public ImageAdapter(Context context)
    {
        this.context = context;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View myView = convertView;
        //LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if(convertView == null)
        {
            LayoutInflater li = infl;
            myView= li.inflate(R.layout.grid_items, null);

        }
        EditText editText = (EditText) myView.findViewById(R.id.grid_item_edit_text_red); 
        //^ moved to outside the null block
        etCollection[position] = editText;   
        return myView;
    }

这篇关于如何从网格视图值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆