无法刷新列表..
我有两个java文件 MainActivity.java 和CustomAdapter.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;
}
}
和
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/查看输出 任何建议都会非常出色.. :)
答案 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)
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;
}
}