Android - 从夸张的布局Listview获取文本

时间:2014-08-22 21:47:37

标签: android listview

我有一个列表视图,其中我使用多个textview和按钮来扩展布局。我理解从点击的视图中获取文本((Textview)view...。但是,我试图从位于用户单击的布局中的特定textview获取文本。我尝试过使用OnItemClick但是当我使用它时,必须在任何按钮功能工作之前聚焦项目。我使用并优先在我的自定义适配器的getView方法中使用onClickListeners。简单地说,如果因为每个膨胀的布局被视为一个列表项,我如何单击一个Button并获取TextView中位于相应的膨胀布局列表视图项中的文本?

这是照片,以澄清我在寻找什么。两种布局都是列表视图的成员。 enter image description here

enter image description here

我想单击带有日期的按钮,并从布局中间的textview中获取文本。但是,当我单击带有日期的按钮时,我只能从最后一个孩子的布局中间的textview中获取文本。如果“我的派对”是列表视图中的第一个孩子,而“3303离开服务...”是第二个孩子,当我单击日期按钮时,我的自定义适配器中的代码将返回视图中上次加载的文本中的文本这将是“3303远离服务”。我想要做的是当我点击“我的派对”上的日期按钮时,获取文字“我的派对”。和第二个孩子一样聪明。

这是我的自定义适配器中的getView()。

 @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        viewHolder = new ViewHolder();

        positionHolder = position;
        Log.i("Position", "" + position);

        if(convertView == null) {

            try {

                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.post_layout, parent, false);
                postLayout = convertView;

                viewHolder.unameTV = (TextView) postLayout.findViewById(R.id.postUnameTv);
                viewHolder.unameTV.setText(viewContent.get(index));
                viewHolder.unameTV.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // Starting new intent
                        Intent in = new Intent(getActivity(),
                                Profile.class);
                        // sending pid to next activity
                        String username =((TextView)view).getText().toString();
                        in.putExtra("username", username);

                        // starting new activity and expecting some response back
                        startActivityForResult(in, 100);
                    }
                });

                viewHolder.fillSpace = (TextView)postLayout.findViewById(R.id.posthelpSpace);
                viewHolder.fillSpace.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        viewHolder.unameTV.performClick();
                    }
                });




                viewHolder.image = (ImageView) postLayout.findViewById(R.id.postProfPic);
                DisplayImageOptions options = initiateDisplayImageOptions();
                viewHolder.image.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        viewHolder.unameTV.performClick();
                    }
                });

                ImageLoader imageloader = ImageLoader.getInstance();

                initImageLoader(getActivity());
                imageloader.displayImage(viewContent.get(index + 1), viewHolder.image, options);




                viewHolder.addToCalendarButton = (TextView) postLayout.findViewById(R.id.addToCalendarButton);
                viewHolder.addToCalendarButton.setText(viewContent.get(index + 2));
                viewHolder.addToCalendarButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Calendar cal = new GregorianCalendar();
                        cal.setTime(new Date());
                        cal.add(Calendar.MONTH, 2);
                        long time = cal.getTime().getTime();

                        Uri.Builder builder =
                                CalendarContract.CONTENT_URI.buildUpon();
                        builder.appendPath("time");
                        builder.appendPath(Long.toString(time));
                        Intent intent =
                                new Intent(Intent.ACTION_INSERT, CalendarContract.Events.CONTENT_URI);

                        title = testText.getText().toString();
                        Log.i("Title", "" + title);
                        intent.putExtra("title", title); // **NOT WORKING**
                        startActivity(intent);
                    }
                });



                viewHolder.eventTitle = (TextView) postLayout.findViewById(R.id.postTitleTV);
                viewHolder.eventTitle.setText(viewContent.get(index + 3));
                viewHolder.eventTitle.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        title = ((TextView)view).getText().toString();
                        Log.i("TITLE", "" + title);

                    }
                });

                testText = viewHolder.eventTitle;
                viewHolder.eventImage = (ImageView) postLayout.findViewById(R.id.eventImage);
                imageloader.displayImage(viewContent.get(index + 4), viewHolder.eventImage, options);


                viewHolder.likesTV = (TextView) postLayout.findViewById(R.id.likesTV);
                viewHolder.likesTV.setText("" + viewContent.get(index + 5));

                viewHolder.planToAttendTV = (TextView) postLayout.findViewById(R.id.planToAttendTV);
                viewHolder.planToAttendTV.setText(viewContent.get(index + 6));

                viewHolder.addressTV = (TextView) postLayout.findViewById(R.id.postLocationTV);
                viewHolder.addressTV.setText("" + viewContent.get(index + 7));


                index = index + 8;


            }
            catch (IndexOutOfBoundsException ie)
            {
                ie.printStackTrace();
            }
        }
        else
        {
            viewHolder = (ViewHolder) postLayout.getTag();
        }




        return postLayout;
    }

更新

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:background="@drawable/fill_back"
>

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="400dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:id="@+id/relativeLayout"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/postUnameTv"
        android:layout_alignParentTop="true"
        android:layout_marginTop="30dp"
        android:gravity="center|center_vertical|center_horizontal"
        android:textColor="#ff518eff"
        android:textSize="12dp"
        android:layout_alignParentStart="true"
        android:layout_toLeftOf="@+id/postProfPic"
        android:text="Joshua" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Public"
        android:id="@+id/postProfileIcon"
        android:background="@drawable/publicicon"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="25dp"
        android:layout_marginRight="70dp"
        />

    <ImageButton
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/postProfPic"
        android:layout_below="@+id/postUnameTv"
        android:layout_centerHorizontal="true"
        />

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="330dp"
        android:id="@+id/eventImage"
        android:layout_alignTop="@+id/space"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true" />

    <Space
        android:layout_width="20px"
        android:layout_height="20px"
        android:layout_alignBottom="@+id/postProfPic"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="18dp"
        android:id="@+id/space" />

    <Space
        android:layout_width="20px"
        android:layout_height="20px"
        android:layout_above="@+id/postProfPic"
        android:layout_centerHorizontal="true"
        android:id="@+id/space2" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/postTitleTV"
        android:layout_below="@+id/postProfPic"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="117dp"
        android:gravity="center|center_vertical|center_horizontal"
        android:textSize="28dp"
        />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton3"
        android:background="@drawable/details_button"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_marginRight="15dp"
        android:layout_marginBottom="10dp"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/postLocationTV"
        android:layout_below="@+id/postProfPic"
        android:layout_alignParentStart="true"
        android:drawableLeft="@drawable/locate_button"
        android:drawablePadding="5dp"
        android:gravity="clip_horizontal"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="5dp"
        android:textSize="12dp"
        android:singleLine="true"
        android:layout_alignEnd="@+id/space"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/addToCalendarButton"
        android:textSize="12dp"
        android:layout_alignBottom="@+id/postLocationTV"
        android:drawableLeft="@drawable/add_to_cal_button"
        android:drawablePadding="5dp"
        android:gravity="bottom"
        android:layout_alignEnd="@+id/imageButton3"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="2 hours ago"
        android:id="@+id/textView2"
        android:textSize="8dp"
        android:gravity="center_vertical|center_horizontal"
        android:paddingRight="10dp"
        android:textColor="#ff828084"
        android:layout_above="@+id/eventImage"
        android:layout_toRightOf="@+id/postProfPic"
        android:layout_alignParentEnd="true"
        android:layout_marginBottom="3dp"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/posthelpSpace"
        android:layout_alignBottom="@+id/space"
        android:layout_alignParentStart="true"
        android:layout_toLeftOf="@+id/postProfPic"
        android:layout_alignTop="@+id/postProfPic" />

</RelativeLayout>

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/likeButton"
    android:background="@drawable/like_button_unsel"
    android:layout_below="@+id/relativeLayout"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="15dp"
    />


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:id="@+id/likesTV"
    android:textColor="#ffe11100"

    android:layout_alignBottom="@+id/likeButton"
    android:layout_toRightOf="@+id/likeButton"
    android:layout_alignTop="@+id/likeButton"
    android:gravity="center|center_vertical|center_horizontal"
    android:paddingLeft="5dp"
    android:paddingTop="5dp"
    />

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="0.3dp"
    android:id="@+id/imageView"
    android:layout_below="@+id/likeButton"
    android:layout_alignParentStart="true"
    android:layout_marginTop="100dp"
    android:background="@drawable/divider" />

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:id="@+id/planToAttendTV"
    android:layout_below="@+id/likesTV"
    android:paddingLeft="5dp"
    android:layout_marginTop="10dp"
    android:layout_alignParentEnd="true"
    android:gravity="center"
    />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:text="Yes"
    android:id="@+id/button"
    android:textSize="10dp"
    android:layout_toRightOf="@+id/textView3"
    android:background="@drawable/border_circular"
    android:layout_marginLeft="2dp"
    android:layout_below="@+id/planToAttendTV"
    android:layout_marginTop="5dp"
    />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:text="No"
    android:id="@+id/button2"
    android:textSize="10dp"
    android:layout_alignTop="@+id/button"
    android:layout_toRightOf="@+id/button"
    android:background="@drawable/border_circular"
    android:layout_marginLeft="8dp"
    />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="Are you attending?"
    android:id="@+id/textView3"
    android:gravity="center"
    android:layout_alignBottom="@+id/button"
    android:layout_toRightOf="@+id/likeButton"
    android:layout_marginBottom="7dp"
    android:layout_marginLeft="45dp"
    android:layout_marginRight="4dp"
    />

2 个答案:

答案 0 :(得分:0)

我建议将孩子自己的布局作为列表项。然后我会创建一个自定义列表视图适配器,它可以使您的布局更简单,并且能够从特定项目中获取文本,而无需担心重复的代码。

答案 1 :(得分:0)

好吧,我想我弄清楚你想要得到什么。纠正我如果我错了。

通常,使用自定义适配器的想法基于对象列表。您需要将所有信息存储在Object中,并创建这些对象的ArrayList。

然后,无论您在列表视图中点击哪个孩子,您都将获得所点击的孩子的索引。该索引也是ArrayList中Object的索引。

在您知道单击了哪个索引之后,您只需使用此索引从ArrayList中获取Object。

例如,如果单击第一个列表项,您将获得的位置是&#34; 0&#34;,那么您将需要使用yourArrayList.get(0).getTheDataYouWant()