どうすれば、baseadapterを使用してカスタムリストビューを更新できますか。何を配置するか、コードのどこに配置するかわかりません。私を助けてください。前もって感謝します
public class EditDetails extends Activity{
public String nameChanged;
public String numChanged;
public String name;
public String num;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.editdetails);
final EditText sqlName = (EditText)findViewById(R.id.editName);
final EditText sqlNumber = (EditText)findViewById(R.id.editNumber);
name = CustomListView.name;
num = CustomListView.number;
Button bUpdate = (Button)findViewById(R.id.editUpdate);
Button bView = (Button)findViewById(R.id.editView);
sqlName.setText(name);
sqlNumber.setText(num);
bUpdate.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
nameChanged = sqlName.getText().toString();
numChanged = sqlNumber.getText().toString();
GroupDb info = new GroupDb(EditDetails.this);
info.open();
long rowid = info.getRowId(name, num);
info.updateNameNumber(rowid, nameChanged, numChanged);
ArrayList<Contact> searchResults = info.getView();
MyCustomBaseAdapter mcba = new MyCustomBaseAdapter(EditDetails.this, searchResults);
Toast.makeText(getApplicationContext(), "Update Successful!", Toast.LENGTH_LONG).show();
info.close();
}
});
bView.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setClass(EditDetails.this, CustomListView.class);
startActivityForResult(intent, 0);
}
});
}
}
ここにリストビューを表示しました
public class CustomListView extends Activity {
final Context context = this;
public static String name;
public static String number;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GroupDb info = new GroupDb(this);
info.open();
ArrayList<Contact> searchResults = info.getView();
final ListView lv = (ListView) findViewById(R.id.srListView);
lv.setAdapter(new MyCustomBaseAdapter(this, searchResults));
info.close();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
// TODO Auto-generated method stub
Object o = lv.getItemAtPosition(position);
final Contact fullObject = (Contact)o;
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder
.setMessage("Select action")
.setCancelable(false)
.setPositiveButton("Edit", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
Toast.makeText(getApplicationContext(), "Edit ", Toast.LENGTH_LONG).show();
name = fullObject.getName();
number = fullObject.getPhoneNumber();
Intent contactIntent = new Intent("myfolder.proj.EDITDETAILS");
startActivity(contactIntent);
}
})
そして、これが私のbaseadapterクラスです
public class MyCustomBaseAdapter extends BaseAdapter {
private static ArrayList<Contact> searchArrayList;
private LayoutInflater mInflater;
public MyCustomBaseAdapter(Context context, ArrayList<Contact> results) {
searchArrayList = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_row_view, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.name);
holder.txtPhone = (TextView) convertView.findViewById(R.id.phone);
holder.status = (TextView) convertView.findViewById(R.id.status);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(searchArrayList.get(position).getName());
holder.txtPhone.setText(searchArrayList.get(position).getPhoneNumber());
holder.status.setText(searchArrayList.get(position).getStatus());
return convertView;
}
static class ViewHolder {
TextView txtName;
TextView txtPhone;
TextView status;
}
}
2つのオプション:コンストラクターに渡したArrayList
の参照を保持して、後で実際のリストデータを変更できるようにします(リストはコピーされないため、アダプターの外部のデータを変更すると、アダプターが参照しているポインターが更新されます)。 、またはリストを別のオブジェクトにリセットできるようにアダプタを書き換えます。
どちらの場合でも、ArrayList
が変更された後、notifyDataSetChanged()
を呼び出して、変更内容でListView
を更新する必要があります。これは、アダプターの内部または外部で実行できます。したがって、たとえば:
public class MyCustomBaseAdapter extends BaseAdapter {
//TIP: Don't make this static, that's just a bad idea
private ArrayList<Contact> searchArrayList;
private LayoutInflater mInflater;
public MyCustomBaseAdapter(Context context, ArrayList<Contact> initialResults) {
searchArrayList = initialResults;
mInflater = LayoutInflater.from(context);
}
public void updateResults(ArrayList<Contact> results) {
searchArrayList = results;
//Triggers the list update
notifyDataSetChanged();
}
/* ...The rest of your code that I failed to copy over... */
}
HTH
baseAdapterで1つのカスタムメソッドを作成する
お気に入り:
public void updateAdapter(ArrayList<Contact> arrylst) {
this.arrylst= arrylst;
//and call notifyDataSetChanged
notifyDataSetChanged();
}
そして、あなたが呼び出したい場所でこの関数呼び出し:e.g
adapterObject.updateAdapter(ここではArrayListを渡します);
完了しました。
上記のソリューションを持つ人に感謝します。すべてのイベントでlistupdateメソッドを呼び出しています
public void updateResults(List<TalebeDataUser> results) {
talebeList = results;
//Triggers the list update
notifyDataSetChanged();
}
また、リストを更新した後、すべてのタッチでボタンアクションを更新します。たとえば、リストビュー項目をクリックするボタンがたくさんあるので、すべてのタッチで他のスタイルを変更します
private void setColor(TalebeDataUser talebeDataUser) {
if (talebeDataUser.isVar()) {
holder.mVar.setBackgroundResource(R.drawable.aw_secili);
holder.mGorevli.setBackgroundResource(R.drawable.aw_shadow);
holder.mYok.setBackgroundResource(R.drawable.aw_shadow);
holder.mIzinli.setBackgroundResource(R.drawable.aw_shadow);
holder.mHatimde.setBackgroundResource(R.drawable.aw_shadow);
} else if (talebeDataUser.isGorevli()) {
holder.mVar.setBackgroundResource(R.drawable.aw_shadow);
holder.mGorevli.setBackgroundResource(R.drawable.aw_secili);
holder.mYok.setBackgroundResource(R.drawable.aw_shadow);
holder.mIzinli.setBackgroundResource(R.drawable.aw_shadow);
holder.mHatimde.setBackgroundResource(R.drawable.aw_shadow);
} else if (talebeDataUser.isYok()) {
holder.mVar.setBackgroundResource(R.drawable.aw_shadow);
holder.mGorevli.setBackgroundResource(R.drawable.aw_shadow);
holder.mYok.setBackgroundResource(R.drawable.aw_secili);
holder.mIzinli.setBackgroundResource(R.drawable.aw_shadow);
holder.mHatimde.setBackgroundResource(R.drawable.aw_shadow);
} else if (talebeDataUser.isIzinli()) {
holder.mVar.setBackgroundResource(R.drawable.aw_shadow);
holder.mGorevli.setBackgroundResource(R.drawable.aw_shadow);
holder.mYok.setBackgroundResource(R.drawable.aw_shadow);
holder.mIzinli.setBackgroundResource(R.drawable.aw_secili);
holder.mHatimde.setBackgroundResource(R.drawable.aw_shadow);
} else if (talebeDataUser.isHatimde()) {
holder.mVar.setBackgroundResource(R.drawable.aw_shadow);
holder.mGorevli.setBackgroundResource(R.drawable.aw_shadow);
holder.mYok.setBackgroundResource(R.drawable.aw_shadow);
holder.mIzinli.setBackgroundResource(R.drawable.aw_shadow);
holder.mHatimde.setBackgroundResource(R.drawable.aw_secili);
}
}
私のボタンの1つの内部の単なる例
holder.mYok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//talebeList.remove(currentTalebe);
setOgrenciNameByDurum(talebeList.get(i));
talebeList.get(i).setYok(true);
//setOgrenciNameByDurum(currentTalebe);
talebeList.get(i).setVar(false);
talebeList.get(i).setGorevli(false);
talebeList.get(i).setIzinli(false);
talebeList.get(i).setHatimde(false);
updateResults(talebeList);
setColor(talebeList.get(i));
//saveCurrentTalebeOnShare(currentTalebe);
}
});
talebeListはList<MyModel> talebeList
BaseAdapterを使用するだけで、コンテキストを使用する必要はありません
listsOfNotes.remove(listsOfNotes.get(position));
notifyDataSetChanged();
このコードをsetOnClickListner
に配置するだけです
この機能をカスタムアダプターに追加してこの問題を解決しました
public void newCursor(Cursor cursor)
{
this.cursor=cursor;
this.notifyDataSetChanged();
}
メインクラスから、データベースへの再クエリを実行する新しいカーソルを作成し、この関数を介してカスタムアダプターに送信します。
幸運を