谁能告诉我为什么点击按钮什么都没发生?

时间:2015-06-24 09:22:21

标签: android listview

无法刷新列表..

我有两个java文件 MainActivity.java 和CustomAdapter.java

MainActivity.java

package com.dv.deletev;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {

    ListView lv;
    String name[]={"Ankit","Arora","Arun","yadav"};
    String no[]={"AnAnaAN","cccc","bbbbb","aaa"};
    static CustomAdapter obj;



    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv=(ListView)findViewById(R.id.listView1);

        obj=new CustomAdapter(MainActivity.this,name,no);

        lv.setAdapter(obj);

    }

    public static  CustomAdapter take()
    {
        return obj;
    }
}

  

CustomAdapter.java

package com.dv.deletev;

import java.util.ArrayList; 
import java.util.Arrays;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;

import com.dv.deletev.*;

public class CustomAdapter extends ArrayAdapter<String>
{

String name[];
String no[];
    Context con;
    MainActivity a;
    public CustomAdapter(Context con,String a[],String b[])
    {
        super(con,R.layout.second,a);
        name=a;
        this.con=con;   
        no=b;
        }



    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
    LayoutInflater lv=(LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView=lv.inflate(R.layout.second, null);

    TextView tv1=(TextView)convertView.findViewById(R.id.textView1);
    TextView tv2=(TextView)convertView.findViewById(R.id.textView2);
    Button  bt=(Button)convertView.findViewById(R.id.button1);      
        final List<String> arr1;
        final List<String> arr2;
        arr1=(List<String>) Arrays.asList(name);
        arr2=(List<String>) Arrays.asList(no);

        final ArrayList<String> arr=new ArrayList<String>(arr1);
        final ArrayList<String> ar=new ArrayList<String>(arr2);


    bt.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
        arr.remove(position);
        ar.remove(position);
        a.take().notifyDataSetChanged();
        }

    });
        tv1.setText(name[position]);
        tv2.setText(no[position]);

        return convertView;
    }







}

我不知道为什么单击按钮它不执行onclick功能。一世 多次检查代码并且正确无误。

您可以在http://postimg.org/image/5fxs20wgp/查看输出 任何建议都会非常出色.. :)

5 个答案:

答案 0 :(得分:0)

请使用ViewHolder模式来改善您的表现, http://developer.android.com/training/improving-layouts/smooth-scrolling.html

我认为onClick有效,但你看不到它,因为在删除项目时你必须通知你的列表适配器。

CustomAdapter.this.notifyDatasetChanged();

要看到,onClick确实有用,请添加Log.e(“1”,“1”);在onClick中,我现在调用了m sure you are going to see the log, so actually onClick get,你忘了刷新适配器了。

  @Override
    public void onClick(View v)
    {
    Log.e("1","onClick");
    arr.remove(position);
    ar.remove(position);
    a.take().notifyDataSetChanged();
    }

答案 1 :(得分:0)

好吧,这里有一些错误。 1)通知适配器
2)使用视图保持器设计模式
3)由于按钮位于列表视图内,焦点转到列表视图,实现视图持有者,它将开始工作。

public class CustomAdapter extends ArrayAdapter<String>
{
    String name[];
    Context con;
    public CustomAdapter(Context con,String a[])
    {
        name=a;
        this.con=con;   
    }

static class Holder{
Button buton;
}

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater lv=(LayoutInflater)       con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView=lv.inflate(R.layout.second, null);
    Holder holder = new Holder;
    if(convertView==null){
    Button  bt=(Button)convertView.findViewById(R.id.button1);
    convertView.setTag(holder);      
    }else{
      holder=convertView.getTag(holder)
    }   

    holder.button.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
             Log.d("","inside click")
             todo embed logic here 
        }

    });
        return convertView;
    }

并将适配器更改为

{{1}}

答案 2 :(得分:0)

在MainActivity.java中的这一行

之后
  

obj = new CustomAdapter(MainActivity.this,name,no);

     

lv.setAdapter(OBJ);

你可以写这个

  

obj.notifyDataSetChanged();

答案 3 :(得分:0)

CustomAdapter.java


 TextView tv1=(TextView)convertView.findViewById(R.id.textView1);
    TextView tv2=(TextView)convertView.findViewById(R.id.textView2);
    Button  bt=(Button)convertView.findViewById(R.id.button1);      
        final List<String> arr1;
        final List<String> arr2;
        arr1=(List<String>) Arrays.asList(name);
        arr2=(List<String>) Arrays.asList(no);

        final ArrayList<String> arr=new ArrayList<String>(arr1);
        final ArrayList<String> ar=new ArrayList<String>(arr2);


    bt.setOnClickListener(new Listener()); 
        tv1.setText(name[position]);
        tv2.setText(no[position]);

        return convertView;
    }
class Listener implements OnClickListener
{
 @Override
        public void onClick(View v)
        {
        arr.remove(position);
        ar.remove(position);
        a.take().notifyDataSetChanged();
        }

}

答案 4 :(得分:0)

CustomAdapter

public CustomAdapter(Context con, String a[], String b[]) {
    super(con, R.layout.second, a);
    name = a;
    this.con = con;
    no = b;
}

public static class ViewHolder {
    // TODO Auto-generated method stub
    TextView tv1, tv2;
    Button bt;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    LayoutInflater inflater;
    ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = new View(mContext);
        convertView = inflater.inflate(R.layout.second, null);
        holder.tv1 = (TextView) convertView.findViewById(R.id.textView1);
        holder.tv2 = (TextView) convertView.findViewById(R.id.textView2);
        holder.bt = (Button) convertView.findViewById(R.id.button1);
        convertView.setTag(v);
        final List<String> arr1;
        final List<String> arr2;
        arr1 = (List<String>) Arrays.asList(name);
        arr2 = (List<String>) Arrays.asList(no);

        final ArrayList<String> arr = new ArrayList<String>(arr1);
        final ArrayList<String> ar = new ArrayList<String>(arr2);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    v.bt.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            arr.remove(position);
            ar.remove(position);
            notifyDataSetChanged();
        }
    });
    holder.tv1.setText(name[position]);
    holder.tv2.setText(no[position]);
    return convertView;
}

}