공용 어댑터 사용자 정의 - 콜백 메커니즘

4033 단어 Android
1. 리셋: 하나의 클래스 A는 하나의 인터페이스인 CallBack(이 인터페이스는 B클래스의 내부 인터페이스일 수도 있고 독립된 인터페이스일 수도 있다)을 실현한다. 클래스 A는 클래스 B의 인용 b를 포함한다. 클래스 B는 파라미터가 callBack의 방법이나 구조 함수이고 마지막으로 클래스 A는 B의 방법이나 구조 함수를 호출한다. 클래스 B가 특정한 사건을 촉발하면 클래스 A의 CallBack 방법을 호출할 수 있다.마지막으로 작업 결과를 클래스 A로 되돌려줍니다. 이것은 리셋입니다.
2. 예: 공용 어댑터 사용자 정의
(1) 클래스 A: LActivity
public class LActivity extends BaseActivity implements View.OnClickListener,LAdepter.LCallBack{

    Context mContext;
    private ListView listView;
    private LAdepter lAdepter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_item_lenita_item);  //layout,     ListView
        initData();
    }

    private void initData(){
        mContext = this;
        String[] s = new String[3];
        s[0] = "first line";
        s[1] = "second line";
        s[2] = "third line";
        lAdepter = new LAdepter(mContext,LActivity.this,s);
        listView = (ListView)findViewById(R.id.lv_lenita);   //ListView
        listView.setAdapter(lAdepter);
    }

    @Override
    public void onClick(View view) {
       }

    @Override
    public ComponentName getBroadcastComponent() {
        return getComponentName();
    }

    @Override
    public void answer(String str) {
        LogUtil.log("test","call back answer = "+ str);  //         B   String
    }
}

(2) 클래스 B: LAdepter
public class LAdepter extends BaseAdapter {
    LCallBack lCallBack;
    private String[] strings;
    private Context mContext;

    public LAdepter(Context context,LCallBack lCallBack,String[] strings){
        this.lCallBack = lCallBack;
        this.strings = strings;
        mContext = context;
    }

    @Override
    public int getCount() {
        return strings.length;
    }

    @Override
    public String getItem(int i) {
        return strings[i];
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if(view == null){
            view = LayoutInflater.from(mContext).inflate(R.layout.list_item_spinner, null); //    ListView  
            view.setTag(R.id.tv_list_item, view.findViewById(R.id.tv_list_item));
        }
        String content = getItem(i);
        TextView tv_list_item = (TextView) view.getTag(R.id.tv_list_item);
        tv_list_item.setText(content);
        tv_list_item.setOnClickListener(onClickListener);  //      
        tv_list_item.setTag(i);
        return view;
    }

    View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int position = (int)view.getTag();
            lCallBack.answer(getItem(position));  //  
        }
    };

    public interface LCallBack {
        public void answer(String str);  // B     
    }
}

(3)
list_item_lenita_item.xml 및 listitem_spinner.xml


    
    



   

좋은 웹페이지 즐겨찾기