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