使用一个ArrayAdapter类的安卓定制列表视图视图、列表、ArrayAdapter

2023-09-11 12:40:12 作者:女王(Queen)ゆ性

如何使用iPhone等Android的Tick标志来选择行项目?IAM使用的ImageView在list_row.xml.when我点击列表行项目的话,我表现出图像中排ImageView的。

 如果(的getItem(位置)!= NULL){
img.setvisibilty(View.Visible);}
其他{的System.out.println(imagenull);}
 

IAM的利用这一点,但图像显示在最后一排only.please帮助我如何使用对勾标记的图像来选择项目。

 公共类DistanceArrayAdapter扩展ArrayAdapter<恒> {
公共静态字符串类别,状态,千里;
公共ImageView的IMG;
私人上下文的背景下;
私人诠释电流= -1;
ArrayList的<恒>数据对象;

公共DistanceArrayAdapter(上下文的背景下,INT textViewResourceId,
ArrayList的<恒>数据对象){
超(背景下,textViewResourceId,数据对象);
this.context =背景;
}
@覆盖
公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
查看rowView = convertView;
如果(rowView == NULL){
LayoutInflater充气=(LayoutInflater)上下文
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

rowView = inflater.inflate(R.layout.category_row,父母,假);

}
    // TextView中的TextView =(TextView中)rowView.findViewById(R.id.text1);
TextView的textView1 =(TextView中)rowView.findViewById(R.id.text2);
    //textView.setText(""+getItem(position).id);
textView1.setText(+的getItem(位置).caption);
IMG =(ImageView的)rowView.findViewById(R.id.img);
img.setVisibility(View.GONE);
如果(位置%2 == 1)
{
rowView.setBackgroundResource(R.color.even_list);
}
其他
    {
        rowView.setBackgroundResource(R.color.odd_list);
    }
 

rowView.setOnClickListener(新OnClickListener(){

  @覆盖
        公共无效的onClick(视图v){

            如果(img.getVisibility()== View.GONE)
            {
                img.setVisibility(View.VISIBLE);
                的System.out.println(1);
            }
如果(img.getVisibility()== View.VISIBLE){
img.setVisibility(View.GONE);
的System.out.println(12);
}

英里=的getItem(位置).caption;
的System.out.println(英里+英里);
}
});
返回rowView;
}
}
 
31 arrayadapter的原理和使用

解决方案

从的https://groups.google.com/forum/?fromgroups#!topic/android-developers/No0LrgJ6q2M

 公共类MainActivity扩展活动实现AdapterView.OnItemClickListener {
    的String [] GENRES =新的String [] {行动,探险,动画,儿童,喜剧,纪录片,戏剧,外交,历史,独立报, 浪漫,科幻,电视,颤栗};
    私人CheckBoxAdapter mCheckBoxAdapter;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        最终的ListView ListView的=(的ListView)findViewById(R.id.lv);

        listView.setItemsCanFocus(假);
        listView.setTextFilterEnabled(真正的);
        listView.setOnItemClickListener(本);
        mCheckBoxAdapter =新CheckBoxAdapter(本,流派);
        listView.setAdapter(mCheckBoxAdapter);
        按钮B =(按钮)findViewById(R.id.button1);
        b.setOnClickListener(新OnClickListener(){

            @覆盖
            公共无效的onClick(视图v){
                // TODO自动生成方法存根
                StringBuilder的结果=新的StringBuilder();
                的for(int i = 0; I< GENRES.length;我++){
                    如果(mCheckBoxAdapter.mCheckStates.get(一)==真){
                        result.append(流派[I]);
                        result.append(\ N);
                    }

                }
                Toast.makeText(MainActivity.this,结果,1000).show();
            }

        });
    }

    公共无效onItemClick(适配器视图父,视图中查看,INT位置,长的id){
        mCheckBoxAdapter.toggle(位置);
    }

    类CheckBoxAdapter扩展ArrayAdapter实现CompoundButton.OnCheckedChangeListener {
        LayoutInflater mInflater;
        TextView的TV1,电视;
        复选框CB;
        的String []根;
        私人SparseBooleanArray mCheckStates;
        私人SparseBooleanArray mCheckStates;

        CheckBoxAdapter(MainActivity背景下,的String []类型){
            超(背景下,0,体裁);
            mCheckStates =新SparseBooleanArray(genres.length);
            mInflater =(LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            根=类型;
        }

        @覆盖
        公众诠释getCount将(){
            // TODO自动生成方法存根
            返回gen.length;
        }
    }
}
 

activity_main.xml

 < RelativeLayout的
 的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
 机器人:layout_width =FILL_PARENT
 机器人:layout_height =FILL_PARENT>

 <的ListView
 机器人:ID =@ + ID / LV
 机器人:layout_width =WRAP_CONTENT
  机器人:layout_height =WRAP_CONTENT
  机器人:layout_above =@ + ID /按钮1/>
  <按钮
      机器人:ID =@ + ID /按钮1
      机器人:layout_width =WRAP_CONTENT
      机器人:layout_height =WRAP_CONTENT
      机器人:layout_alignParentBottom =真
      机器人:layout_centerHorizo​​ntal =真
      机器人:文本=按钮/>

< / RelativeLayout的>
 

而对于复选框XML文件:

 < XML版本=1.0编码=UTF-8&GT?;
< RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =match_parent>

<的TextView
    机器人:ID =@ + ID / textView1
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_alignParentLeft =真
    机器人:layout_alignParentTop =真
    机器人:layout_marginLeft =15dp
    机器人:layout_marginTop =34dp
    机器人:文本=TextView的/>

<复选框
    机器人:ID =@ + ID / checkBox1
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_alignParentRight =真
    机器人:layout_below =@ + ID / textView1
    机器人:layout_marginRight =22dp
    机器人:layout_marginTop =23dp/>

 < / RelativeLayout的>
 

当您单击显示与项目choosen列表敬酒消息的按钮。您可以根据您的要求修改上述。

how to select row item using Tick mark like iphone in android?iam using imageview in list_row.xml.when i click the list row item then i show image in row imageview.

if(getItem(position)!=null){
img.setvisibilty(View.Visible);}        
else{System.out.println("imagenull");}

iam using this but image display in last row only.please help me how to select item using tickmark image.

public class DistanceArrayAdapter extends ArrayAdapter<Constant>{
public static String category,state,miles;
public ImageView img;
private Context context;
private int current = -1;
ArrayList<Constant> dataObject;

public DistanceArrayAdapter(Context context, int textViewResourceId,
ArrayList<Constant> dataObject) {
super(context, textViewResourceId, dataObject);
this.context=context;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowView=convertView;
if(rowView==null){
LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

rowView = inflater.inflate(R.layout.category_row, parent, false);

}
    //TextView textView = (TextView) rowView.findViewById(R.id.text1);
TextView textView1 = (TextView) rowView.findViewById(R.id.text2);
    //textView.setText(""+getItem(position).id);
textView1.setText(""+getItem(position).caption);
img=(ImageView)rowView.findViewById(R.id.img);
img.setVisibility(View.GONE);
if(position%2==1)
{
rowView.setBackgroundResource(R.color.even_list);
}
else
    {
        rowView.setBackgroundResource(R.color.odd_list);
    }

rowView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if(img.getVisibility()==View.GONE)
            {
                img.setVisibility(View.VISIBLE);
                System.out.println("1");
            }
if(img.getVisibility()==View.VISIBLE){
img.setVisibility(View.GONE);
System.out.println("12");
}

miles=getItem(position).caption;
System.out.println("miles"+miles);
}
});
return rowView;
}
}

解决方案

Drawing from https://groups.google.com/forum/?fromgroups#!topic/android-developers/No0LrgJ6q2M

public class MainActivity extends Activity implements AdapterView.OnItemClickListener {
    String[] GENRES = new String[] {"Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama", "Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"};
    private CheckBoxAdapter mCheckBoxAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ListView listView = (ListView) findViewById(R.id.lv);

        listView.setItemsCanFocus(false);
        listView.setTextFilterEnabled(true);
        listView.setOnItemClickListener(this);
        mCheckBoxAdapter = new CheckBoxAdapter(this, GENRES);
        listView.setAdapter(mCheckBoxAdapter);
        Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                StringBuilder result = new StringBuilder();
                for (int i = 0; i < GENRES.length; i++) {
                    if (mCheckBoxAdapter.mCheckStates.get(i) == true) {
                        result.append(GENRES[i]);
                        result.append("\n");
                    }

                }
                Toast.makeText(MainActivity.this, result, 1000).show();
            }

        });
    }

    public void onItemClick(AdapterView parent, View view, int position, long id) {
        mCheckBoxAdapter.toggle(position);
    }

    class CheckBoxAdapter extends ArrayAdapter implements CompoundButton.OnCheckedChangeListener {
        LayoutInflater mInflater;
        TextView tv1, tv;
        CheckBox cb;
        String[] gen;
        private SparseBooleanArray mCheckStates;
        private SparseBooleanArray mCheckStates;

        CheckBoxAdapter(MainActivity context, String[] genres) {
            super(context, 0, genres);
            mCheckStates = new SparseBooleanArray(genres.length);
            mInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            gen = genres;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return gen.length;
        }
    }
}

activity_main.xml

 <RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent">

 <ListView
 android:id="@+id/lv"
 android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_above="@+id/button1"/>
  <Button
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true"
      android:layout_centerHorizontal="true"
      android:text="Button" />

</RelativeLayout>

And the XML file for the checkboxes:

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

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="15dp"
    android:layout_marginTop="34dp"
    android:text="TextView" />

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/textView1"
    android:layout_marginRight="22dp"
    android:layout_marginTop="23dp" />

 </RelativeLayout>

When you click the button a toast message with list of item choosen is displayed. You can modify the above according to your requirements.

 
精彩推荐
图片推荐