0
Listview
與CursorAdapter
,我想通知onClick
下面的事件。如何從其適配器通知DialogFragment中的Listview?
的CursorAdapter
public class HistoryAdapter extends CursorAdapter {
Button button;
TextView text;
final MainActivity mainActivity ;
HistoryDialogue historyDialogue ;
public HistoryAdapter(Context context, Cursor c, int flags) {
super(context, c, flags);
mainActivity = (MainActivity) context;
historyDialogue = new HistoryDialogue();
}
@Override
public View newView(final Context context, Cursor cursor, ViewGroup parent) {
View view = LayoutInflater.from(context).inflate(R.layout.historylist, parent, false);
return view;
}
@Override
public void bindView(View view, final Context context, final Cursor cursor) {
text = (TextView) view.findViewById(R.id.text);
button = (Button) view.findViewById(R.id.btn);
final int pos = cursor.getPosition();
cursor.moveToFirst();
String body = cursor.getString(cursor.getColumnIndex(Contract.SaveRunning_Name.NAME));
text.setText(body);
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
// this for delete only items in history list by getting cursor position then use it to get number of ites row
// in database finally delete it ...
ContentResolver resolver = context.getContentResolver();
Cursor c = resolver.query(Contract.SaveRunning_Name.CONTENT_URI,null,null,null,null);
c.moveToPosition(pos);
int position_column =c.getColumnIndex(Contract.SaveRunning_Name._ID);
int position = c.getInt(position_column);
String delete_save = Contract.SaveRunning_Name._ID + " = " + position + ";";
int srun = resolver.delete(Contract.SaveRunning_Name.CONTENT_URI, delete_save, null);
updateEntries();
}
});
}
public void updateEntries(){
mainActivity.addEntries(0,0,true);
}
}
DialogFragment
public class HistoryDialogue extends DialogFragment implements View.OnClickListener {
ListView list ;
Cursor c;
HistoryAdapter adapter;
History history ;
Button button ;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
history = (History) activity;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setCancelable(true);
getDialog().setTitle("History");
View view = inflater.inflate(R.layout.history,null);
list = (ListView) view.findViewById(R.id.listView);
button = (Button) view.findViewById(R.id.button);
button.setOnClickListener(this);
ContentResolver resolver = getActivity().getContentResolver();
c = resolver.query(Contract.SaveRunning_Name.CONTENT_URI, null, null, null, null);
adapter = new HistoryAdapter(getActivity(), c, 0);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setChart(position);
dismiss();
}
});
return view ;
}
public void setChart(int position) {
Cursor cursor;
ContentResolver resolver = getActivity().getContentResolver();
cursor = resolver.query(Contract.SaveRunning.CONTENT_URI, null,null, null, null);
cursor.moveToPosition(position);
int HIGH_COLUMN = cursor.getColumnIndex(Contract.SaveRunning.HIGH);
int high = cursor.getInt(HIGH_COLUMN);
int LOW_COLUMN = cursor.getColumnIndex(Contract.SaveRunning.LOW);
int offset = cursor.getInt(LOW_COLUMN);
int limit = high-offset ;
history.limits(limit,offset,false,false);
}
@Override
public void onClick(View v) {
Cursor cursor;
Cursor running ;
ContentResolver resolver = getActivity().getContentResolver();
cursor = resolver.query(Contract.SaveRunning.CONTENT_URI, null,null, null, null);
ContentResolver solver = getActivity().getContentResolver();
running = solver.query(Contract.Running.CONTENT_URI, null,null, null, null);
if(cursor!=null && running!=null) {
cursor.moveToLast();
int HIGH_COLUMN = cursor.getColumnIndex(Contract.SaveRunning.HIGH);
int offset = cursor.getInt(HIGH_COLUMN);
running = resolver.query(Contract.Running.CONTENT_URI, null, null, null, null);
running.moveToLast();
int id = running.getColumnIndex(Contract.Running._ID);
int LAST_RUNNING_ID = running.getInt(id);
int limit = LAST_RUNNING_ID - offset;
history.limits(limit, offset, false, false);
dismiss();
}
}
interface History {
public void limits(int limit,int offset,boolean state,boolean back);
}
}
我如何能實現那? thanx提前
我在問如何通知更改...我使用接口,因爲你描述和我得到空指針異常如果通知listview甚至使用setAdapter方法 – Error
零點異常??哪裏?? – Prachi
你是否將回調實例從片段傳遞給適配器? – Prachi