我有应用程序这个应用程序包含listview,Listview
从本地数据库sqlite
检索数据,通过使用适配器这是我的Adapter类代码:
public class CommandsListAdapter extends BaseAdapter {
public static String ID = null;
private List<String> data;
ArrayList<HashMap<String, String>> commandList = new ArrayList<HashMap<String, String>>();
private ArrayAdapter<String> listAdapter;
Context context;
public CommandsListAdapter(Context con,
ArrayList<HashMap<String, String>> list) {
commandList = list;
context = con;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return commandList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return commandList.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(final int index, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.people_list, null);
}
TextView tvTime = (TextView) convertView.findViewById(R.id.timeOfBlock);
TextView tvName = (TextView) convertView.findViewById(R.id.name);
tvName.setText(commandList.get(index).get(MyDatabase.Number_Block));
tvTime.setText(commandList.get(index).get(MyDatabase.Time_Of_Block));
Typeface tf = Typeface.createFromAsset(context.getAssets(),
"segoeuil.ttf");
tvTime.setTypeface(tf);
tvName.setTypeface(tf);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// Message.message(context,
// commandList.get(index).get(MyDatabase.Block_Table_Id));
Intent i = new Intent(context, MessageDetail.class);
i.putExtra(ID,
commandList.get(index).get(MyDatabase.Block_Table_Id)
.toString());
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// context.startActivity(i);
}
});
convertView.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
ID=commandList.get(index).get(MyDatabase.Block_Table_Id);
removeListItem(v, index);
return false;
}
});
return convertView;
}
protected void removeListItem(View rowView, final int positon) {
final Animation animation = AnimationUtils.loadAnimation(
context, android.R.anim.slide_out_right);
rowView.startAnimation(animation);
Handler handle = new Handler();
handle.postDelayed(new Runnable() {
@Override
public void run() {
commandList.remove(positon);
MyDatabase db=new MyDatabase(context);
db.open();
// db.deleteBlock(ID);
db.close();
Message.message(context, ID);
}
}, 1000);
}
}
这是我的活动类代码:
public class ListOfBlock extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_of_block);
ActionBar actionBar = getActionBar();
// for color
actionBar.setBackgroundDrawable(new ColorDrawable(Color
.parseColor("#a20000")));
if (actionBar != null) {
actionBar.setTitle(getResources().getString(
R.string.title_activity_list_of_block));
actionBar.setDisplayHomeAsUpEnabled(true);
// actionBar.setIcon(R.drawable.ic_launcher);
}
ListView lvCommands = (ListView) findViewById(R.id.ListOfBlockerListView);
lvCommands.setAdapter(new CommandsListAdapter(getApplicationContext(),
new MyDatabase(getApplicationContext()).getBlockers()));
}
}
现在我想刷新getview方法中的listview,我不知道该怎么做,我找到了一些答案但是这对我没有帮助,谢谢你的帮助。
答案 0 :(得分:3)
YourActivity.this.recreate();
这将重新创建您的列表。在执行这些操作的行为中保持变量说n = false。然后,当您使用list回调活动时,只需将其传递为true。
在您执行这些操作的活动中,
Intent i = new Intent(Operations.this,ListActivity.class);
ListActivity.n=true;
startActivity(i);
在ListActivity的onCreate中创建一个类变量boolean n=false;
if(n){
ListActivity.this.recreate();
}
希望它有所帮助。干杯!
答案 1 :(得分:1)
我希望这对你有所帮助,在类适配器中执行此操作: -
ArrayList<HashMap<String, String>> commandList = new ArrayList<HashMap<String, String>>();
private ArrayList<HashMap<String, String>> searchArrayList;
public CommandsListAdapter(Context con,
ArrayList<HashMap<String, String>> list) {
commandList = list;
context = con;
searchArrayList=list;
}
并创建一个函数来更新listview
,就像在适配器类中一样: -
public void updateResults(ArrayList<HashMap<String, String>> results) {
searchArrayList = results;
//Triggers the list update
notifyDataSetChanged();
}
以及您想要更新listview
的任何地方调用此功能,我为您Sister
执行了此操作,如下所示: -
updateResults(commandList);
有一件事可以肯定这些代码是你的所有代码,但我做了一些修改,updateResults
函数commandList
的参数这是你已经定义的ArrayAdapter。
我希望这是工作
答案 2 :(得分:0)
只需调用BaseAdapter类的notifyDataSetChanged()即可刷新列表视图项。根据您的要求适当调用它。 欢呼声。