
如何检查GrIDVIEw中的项目是否已被点击?比如为GrID中的EACH项目分配一个布尔’clicked’并在每次单击该项时更改它的值.
目前我只是使用一个bool数组,所以如果我点击项目[x]它会切换bool [x]然后我会检查它是否为true / false并相应地修改项目,但必须有一个更简洁的方式这样做!
我的代码:
package com.example.mojrecnik;import java.io.BufferedReader;import java.io.file;import java.io.fileReader;import java.io.IOException;import androID.os.Bundle;import androID.os.Environment;import androID.app.Activity;import androID.content.Context;import androID.vIEw.LayoutInflater;import androID.vIEw.Menu;import androID.vIEw.MenuItem;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ArrayAdapter;import androID.Widget.GrIDVIEw;import androID.Widget.AdapterVIEw;import androID.Widget.TextVIEw;import androID.Widget.Toast;import androID.support.v4.app.NavUtils;public class Glavna extends Activity implements AdapterVIEw.OnItemClickListener { private static final int LENGTH_SHORT = 0; GrIDVIEw grID; TextVIEw tekst; String[] izfajla = new String[200]; String[] izfajla2 = new String[200]; boolean[] kliknutmrs = new boolean[200]; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_glavna); grID=(GrIDVIEw)findVIEwByID(R.ID.grID); grID.setAdapter(new MojAdapter()); grID.setonItemClickListener(this); //tekst=(TextVIEw)findVIEwByID(R.ID.tekst); citaFajl(); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_glavna,menu); return true; } public voID onItemClick(AdapterVIEw<?> arg0,VIEw arg1,int arg2,long arg3) { TextVIEw klik = (TextVIEw)arg1.findVIEwByID(R.ID.grIDtekst2); if(kliknutmrs[arg2]) { kliknutmrs[arg2]=!kliknutmrs[arg2]; klik.setText(izfajla[arg2]); } else { kliknutmrs[arg2]=!kliknutmrs[arg2]; klik.setText(izfajla2[arg2]); } } public voID onnothingSelected(AdapterVIEw<?> arg0) { } public voID citaFajl() { file kartica = Environment.getExternalStorageDirectory(); file fajl = new file(kartica,"reci.txt"); StringBuilder tekst = new StringBuilder(); int i=0; try { BufferedReader br = new BufferedReader(new fileReader(fajl)); String linija; String[] prva; while ((linija = br.readline())!=null) { prva = linija.split("-"); izfajla[i]=prva[0]; if(prva[1].length()>0) izfajla2[i]=prva[1]; i++; } } catch (IOException e) { Toast greska = Toast.makeText(this,e.getMessage().toString(),LENGTH_SHORT); greska.show(); } } private class MojAdapter extends ArrayAdapter { public MojAdapter() { super(Glavna.this,R.layout.grIDvju,izfajla); } public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) { //vazno!! pravim vju od inflatera i vracam vju a ne convertvju! VIEw grIDvju; if(convertVIEw==null) { LayoutInflater inflater = getLayoutInflater(); grIDvju = inflater.inflate(R.layout.grIDvju,parent,false); } else grIDvju=convertVIEw; TextVIEw tekst2 = (TextVIEw)grIDvju.findVIEwByID(R.ID.grIDtekst2); tekst2.setlines(2); tekst2.setText(izfajla[position]); return(grIDvju); } }} 和XML(主要):
<relativeLayout 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" ><!-- <TextVIEw androID:ID="@+ID/tekst" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_alignParentleft="true" androID:layout_alignParenttop="true" androID:textSize="20dp" androID:layout_below="@ID/tekst" > </TextVIEw> --> <GrIDVIEw androID:ID="@+ID/grID" androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_alignParentleft="true" androID:horizontalSpacing="@dimen/padding_medium" androID:numColumns="3" androID:stretchMode="columnWIDth" > </GrIDVIEw></relativeLayout>
和布局:
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:orIEntation="vertical" > <TextVIEw xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:ID="@+ID/grIDtekst2" /></linearLayout>解决方法 以下是我最终的工作方式.我创建了一个自定义类来包含显示的文本,并在其中添加了一个bool,所以现在grIDvIEw中的每个元素都有自己的“点击检查器”.
注意:这个程序简单地在onClick之间交替显示2个单词,如果你想尝试使用带有数据格式化’word1 – word2’的文本文件
码:
package com.example.mojrecnik;import java.io.BufferedReader;import java.io.file;import java.io.fileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import androID.os.Bundle;import androID.os.Environment;import androID.app.Activity;import androID.vIEw.LayoutInflater;import androID.vIEw.Menu;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ArrayAdapter;import androID.Widget.GrIDVIEw;import androID.Widget.AdapterVIEw;import androID.Widget.TextVIEw;import androID.Widget.Toast;public class Glavna extends Activity implements AdapterVIEw.OnItemClickListener { private static final int LENGTH_LONG = 1; GrIDVIEw grID; List<Rec> lReci = new ArrayList<Rec>(); //this is our List of data which contains text and bool check @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_glavna); citaFajl(); grID=(GrIDVIEw)findVIEwByID(R.ID.grID); grID.setAdapter(new MojAdapter()); grID.setonItemClickListener(this); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_glavna,long arg3) { VjuHolder holder=(VjuHolder)arg1.getTag(); if(!lReci.get(arg2).clicked) holder.text.setText(lReci.get(arg2).rec2); else holder.text.setText(lReci.get(arg2).rec1); lReci.get(arg2).clicked = !lReci.get(arg2).clicked; } public voID onnothingSelected(AdapterVIEw<?> arg0) { ////////////////////////////////////////// } public voID citaFajl() { try { BufferedReader br = new BufferedReader(new fileReader(new file(Environment.getExternalStorageDirectory(),"reci.txt"))); String[] reci = new String[2]; String linija; Rec rec; while ((linija = br.readline()) != null) { reci = linija.split("-"); //because data in my file is formatted 'word1 - word2',we separate them Now so we can alternate between them reci[1]=reci[1].trim(); rec = new Rec(reci[0],reci[1],false); lReci.add(rec); } } catch (IOException e) { Toast.makeText(this,LENGTH_LONG).show(); } } private class MojAdapter extends ArrayAdapter<String> { public MojAdapter() { super(Glavna.this,R.layout.grIDvju); } public int getCount() { return lReci.size(); //here we explicitly set the total number of grID elements so it doesn't go out of index range } public VIEw getVIEw(int position,VIEwGroup parent) { VjuHolder holder; if(convertVIEw==null) { LayoutInflater inflater = getLayoutInflater(); convertVIEw = inflater.inflate(R.layout.grIDvju,false); holder = new VjuHolder(); holder.text = (TextVIEw)convertVIEw.findVIEwByID(R.ID.grIDtekst2); convertVIEw.setTag(holder); } else holder=(VjuHolder)convertVIEw.getTag(); if(lReci.get(position).clicked) //check to make grID update according to the clicked state of our elements [when scrolling] holder.text.setText(lReci.get(position).rec2); else holder.text.setText(lReci.get(position).rec1); holder.text.setlines(2); return(convertVIEw); } }}//holder classclass VjuHolder { TextVIEw text;}//here we put the text to be displayed along with bool to check in which state is the clicked elementclass Rec { String rec1,rec2; boolean clicked; Rec(String rec,String druga,boolean klik) { rec1 = rec; rec2 = druga; clicked = klik; }} 总结 以上是内存溢出为你收集整理的android检查项目是否被点击全部内容,希望文章能够帮你解决android检查项目是否被点击所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)