如何在android中的另一个活动中使用任何其他布局的组件(除了在setContentView()中定义)

时间:2015-11-24 12:38:01

标签: android listview android-activity layout

我正在开发一个应用程序,我需要在listview中显示一些数据,因为我创建了一个连接到包含listview的布局的活动,对于listview我创建了自定义listitem。现在我需要从活动中的自定义列表项访问组件(Imageview)。谁能告诉我如何实现这个目标?

这是活动

package com.example.manishnegi.sharemyride;


public class RideMatched extends Activity {
int commentCount       = 0;
private List<GetRidesSummaryDetails> oslist = new ArrayList<GetRidesSummaryDetails>();
ListView rides_matchedListview;
ImageView hrate1,hrate2,hrate3,hrate4,hrate5;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ride_matched);
    hrate1=(ImageView)findViewById(R.id.hrate1);
    hrate2=(ImageView)findViewById(R.id.hrate2);
    hrate3=(ImageView)findViewById(R.id.hrate3);
    hrate4=(ImageView)findViewById(R.id.hrate4);
    hrate5=(ImageView)findViewById(R.id.hrate5);
    int l=0;
   String arr;
    JSONArray array=new JSONArray();
    Bundle b=getIntent().getExtras();
    if(b!=null)
    {
     l=b.getInt("array_length");
        arr=b.getString("rides_array");
        try {
             array=new JSONArray(arr);
            Log.e("String to array ",array.toString());
        } catch (JSONException e) {
            e.printStackTrace();
            Log.e("String to array",e.getMessage());

        }

        Log.e("Number of matched",l+"");
    }
    rides_matchedListview = (ListView)findViewById(R.id.rides_matchedListview);
    Second scnd = new Second();
    List<GetRidesSummaryDetails> detailsofrides = scnd.getallcomments(l,array);
    for (GetRidesSummaryDetails values :detailsofrides){
        String driver_imageget = values.getDriverimage();
        String driver_nameget = values.getDrivername();
        String pickup_get = values.getPickuptime();
        String ride_idget= values.getRideId();
        String rating_get = values.getRating();
        String vehicle_imageget = values.getVehicleImage();

        GetRidesSummaryDetails vehi = new GetRidesSummaryDetails();
        vehi.setDriverimage(driver_imageget);
        vehi.setDrivername(driver_nameget);
        vehi.setPickuptime(pickup_get);
        vehi.setRideId(ride_idget);
        vehi.setRating(rating_get);
        setRating(Integer.parseInt(rating_get));
        vehi.setVehicleImage(vehicle_imageget);
        oslist.add(vehi);
        commentCount++;
        rides_matchedListview.setAdapter(new RidesMatchedAdapter(RideMatched.this, 0, oslist));
        new RidesMatchedAdapter(RideMatched.this ,0, oslist).notifyDataSetChanged();

    }
}

public void setRating(int rate)
{
    if (rate == 1) {
        hrate1.setImageResource(R.drawable.star);


    }

    if (rate == 2) {
        hrate1.setImageResource(R.drawable.star);
        hrate2.setImageResource(R.drawable.star);

    }

    if (rate == 3) {
        hrate1.setImageResource(R.drawable.star);
        hrate2.setImageResource(R.drawable.star);
        hrate3.setImageResource(R.drawable.star);

    }

    if (rate == 4) {
        hrate1.setImageResource(R.drawable.star);
        hrate2.setImageResource(R.drawable.star);
        hrate3.setImageResource(R.drawable.star);
        hrate4.setImageResource(R.drawable.star);

    }

    if (rate == 5) {
        hrate1.setImageResource(R.drawable.star);
        hrate2.setImageResource(R.drawable.star);
        hrate3.setImageResource(R.drawable.star);
        hrate4.setImageResource(R.drawable.star);
        hrate5.setImageResource(R.drawable.star);

    }

}
}

这是listview布局(ride_matched.xml)

I've set this layout in my activity

这是自定义列表项

I want to imageview of this layout in my activity

3 个答案:

答案 0 :(得分:1)

您必须使用该适配器为listview创建适配器,声明viewHolder中的图像应该有效。

答案 1 :(得分:0)

使用任何适配器(根据您的需要)来扩充ListView中的数据。在适配器本身中,您可以访问自定义listitem的组件。 您无法访问活动内的自定义列表项的组件。它们只能在扩展ListView中的数据的适配器内访问。

答案 2 :(得分:0)

我们需要将适配器传递给listview。适配器包含要在列表中显示的模型对象列表。您可以创建扩展基本适配器的自定义适配器。您可以按照以下教程进行操作 http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67&aaid=92

注意适配器中的getView方法并根据以下get view行中的自定义布局更改布局名称    vi = inflater.inflate(R.layout.tabitem,null);

创建一个holder类,其中包含要在列表中显示的所有视图项。 您无需从活动访问Image视图,因为可以在每次迭代的getView方法中访问它。