2015-08-27 22 views
0

ListviewCursorAdapter,我想通知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提前

回答

0

您可以使用廣播接收通知片段
或創建回調方法來通知片段
1]創建接口,並實現它在你的片段
2]通過它的對象適配器,並使用該反對通知片段

//代碼示例

public interface ICallback { 

    void onClick(); 

} 

// HistoryAdapter

@Override 
public void bindView(View view, final Context context, final Cursor cursor) { 
//your code 

    button.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) { 
      //your code 
iCallbackInstance.onClick(); 

     } 
    }); 

} 

編輯

//在HistoryAdapter

public class HistoryAdapter extends CursorAdapter { 
ICallback iCallbackInstance; 
public HistoryAdapter(Context context, Cursor c, int flags, ICallback instance;) { 
    super(context, c, flags); 
    mainActivity = (MainActivity) context; 
    historyDialogue = new HistoryDialogue(); 
iCallbackInstance = instance; 

    } 
} 

// HistoryDialogue

使用

adapter = new HistoryAdapter(getActivity(), c, 0, HistoryDialogue.this) 

,而不是

adapter = new HistoryAdapter(getActivity(), c, 0) 
+1

我在問如何通知更改...我使用接口,因爲你描述和我得到空指針異常如果通知listview甚至使用setAdapter方法 – Error

+0

零點異常??哪裏?? – Prachi

+0

你是否將回調實例從片段傳遞給適配器? – Prachi

相關問題