0

我已经实现了一个具有如下列表视图的抽象类:

public abstract class ExampleListFragment extends ExampleFragment{

    protected ListView _listView;

    public ExampleListFragment () {
        super();
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Set Up the Bottom Bar
        View view = super.onCreateView(inflater, container, savedInstanceState);

        addList();

        return view;

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

    }

    public void addList() {
        _listView = new ListView(getActivity());

        RelativeLayout.LayoutParams parms = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        parms.addRule(RelativeLayout.CENTER_HORIZONTAL);
        parms.addRule(RelativeLayout.BELOW, R.id.tableLayout);

        _listView.setLayoutParams(parms);
        _listView.setClickable(true);
        _listView.setFocusable(true);

        _listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                longListClick(i);
                return true;
            }
        });

        _listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                listClick(i);
            }
        });


        _layout.addView(_listView);

    }

    public abstract void longListClick(int pos);
    public abstract void listClick(int pos);
}

然后我有一个继承自此的类来实现单击列表中的项目时应调用的抽象方法

 public class TwitterFragment extends ExampleListFragment {

        private TwitterAdapter _adapter;

//...


        @Override
        public void onSelected() {

            _adapter      = new TwitterAdapter(getActivity());

            populateAdapter();

        }

        private void populateAdapter() {


            showLoadingTweets();

            new TwitterGetTimelineTask().execute(username); //fills adapter with Twitter status info...

        }


        @Override
        public void longListClick(int pos) {

        Toast toast = Toast.makeText(getActivity(),String.format("You have clicked item number: %d",pos),
            Toast.LENGTH_SHORT);
        toast.show();

        }

        @Override
        public void listClick(int pos) {

        Toast toast = Toast.makeText(getActivity(),String.format("You have clicked item number: %d",pos),
            Toast.LENGTH_SHORT);
        toast.show();


        }

       //...

        class TwitterGetTimelineTask extends AsyncTask<String, String, String> {

          //...
        }
    }

但是,每当我单击一个项目时,它似乎甚至都没有输入 onItemClick 函数。

有任何想法吗?非常感谢帮助。

*编辑*

根据要求,这是我的适配器的代码

public class TwitterAdapter extends BaseAdapter {
    private ArrayList<StatusDetails> _statusDetailsArrayList;
    private LayoutInflater _inflater;

    public TwitterAdapter(Context context) {
        _statusDetailsArrayList = new ArrayList<StatusDetails>();
        _inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return _statusDetailsArrayList.size();
    }

    @Override
    public Object getItem(int i) {
        return _statusDetailsArrayList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return _statusDetailsArrayList.get(i).get_id();
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if (view == null) {
            view = _inflater.inflate(R.layout.twitter_layout, null);
            holder = new ViewHolder();
            holder.img_icon = (ImageView) view.findViewById(R.id.statusImage);
            holder.text_line1 = (TextView) view.findViewById(R.id.statusText);
            holder.text_line2 = (TextView) view.findViewById(R.id.statusDateText);


            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        Bitmap bmp = _statusDetailsArrayList.get(i).get_profile();

        if (bmp == null) {
            holder.img_icon.setImageResource(R.drawable.ic_action_twitter);
        } else {
            holder.img_icon.setImageBitmap(bmp);
        }
        holder.text_line1.setText(_statusDetailsArrayList.get(i).get_text());
        holder.text_line2.setText(_statusDetailsArrayList.get(i).get_date());


        return view;
    }

    public void addStatus(StatusDetails details) {
        _statusDetailsArrayList.add(details);
    }


    public void setStatuses(ArrayList<StatusDetails> details) {
        _statusDetailsArrayList = details;
    }

    public ArrayList<StatusDetails> getEvents() {
        return _statusDetailsArrayList;
    }

    public void removeAll() {
        _statusDetailsArrayList.clear();
    }

    private class ViewHolder {
        ImageView img_icon;
        TextView text_line1;
        TextView text_line2;
    }

}

如果需要,每个列表的布局的 XML

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/statusImage"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="Status"
    android:id="@+id/statusText"
    android:layout_alignParentTop="true"
    android:autoLink="web"
    android:textColor="@android:color/white"
    android:layout_toRightOf="@+id/statusImage" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:layout_below="@id/statusText"
    android:text="Date"
    android:id="@+id/statusDateText"
    android:layout_alignBottom="@+id/statusImage"
    android:layout_toRightOf="@+id/statusImage" />

谢谢。

4

0 回答 0