簡體   English   中英

誰能告訴我為什么單擊按鈕后什么都沒有發生?

[英]Can anyone tell me why nothing is happen on the click of button?

無法刷新列表。

我有兩個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/任何建議都將很明顯.. :)

請使用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現在m sure you are going to see the log, so actually onClick get調用了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)通知適配器
2)使用視圖持有人的設計模式
3)由於按鈕位於列表視圖內部,因此焦點將移至列表視圖,因此實現了視圖持有器,它將開始工作。

public class MainActivity extends Activity {
    ListView lv;
    String name[]={"Ankit","Arora","Arun","yadav"};
    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);
        obj.notifyDataSetChanged();
    }
}

並將您的適配器更改為

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;
    }

在MainActivity.java中的這一行之后

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

lv.setAdapter(OBJ);

你可以寫這個

obj.notifyDataSetChanged();

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();
        }

}

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;
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM