用于填充ListView的ArrayAdapter可以重用于LinearLayout吗?

时间:2013-11-28 21:45:43

标签: android listview android-linearlayout android-arrayadapter

感恩节快乐!“

所以我的Android应用程序正在使用自定义ArrayAdapter类使用自定义对象类动态填充ListView页面。是否可以使用相同的ArrayAdapter在LinearLayout页面上填充字段(TextView,ImageViews)?

基本上,我的ListView页面是:第1项,第2项,第3项等......

单击时,每个项目1,2,3等都将拥有自己的个人页面。

当我点击任何Item#时,我想使用ArrayAdapter发送在ListView页面上显示的相同信息,以便在LinearLayout页面上显示该项目。这可能吗?或者我是否必须为该单个页面创建另一个适配器并传入包含该信息的同一对象?

很抱歉,如果这是一个愚蠢的问题,我仍然是Android编程的noobie。

此外,如果您有任何教程页面,您可以指出我正确的方向,这将是非常有帮助的!谢谢!

片段代码

public class DealsFragment extends Fragment {

@Override  
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  

    View view = inflater.inflate(R.layout.fragment_show_deals, container, false);
    ListView listView = (ListView)view.findViewById(R.id.dealsListView);

    // Sample set of data passed to adapter for testing purposes
    Deal all_deal_data[] = new Deal[]
            {
                new Deal("Deal 1", R.drawable.test_image, 389, 700, 750, 500),
                new Deal("Deal 2", R.drawable.test_image, 20, 80, 1800, 1500),
                new Deal("Deal 3", R.drawable.test_image, 1932, 2000, 75, 60),
                new Deal("Deal 4", R.drawable.test_image, 198, 450, 450, 350),
                new Deal("Deal 5", R.drawable.test_image, 60, 70, 1500, 1100)
            };

    // Sets up adapter to pass data into XML
    DealAdapter adapter = new DealAdapter(getActivity(), R.layout.listview_item_row, all_deal_data);

    // TO ADD HEADER ROW BACK IN
    // View header = (View)inflater.inflate(R.layout.listview_header_row, null);
    // LV.addHeaderView(header);

    listView.setAdapter(adapter);       

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(getActivity(), DealPage.class);  
            startActivity(intent);
        }
    });

    return view;
}

}

2 个答案:

答案 0 :(得分:1)

这就是我通常组织代码的方式。

每个活动都有自己的“show()”方法,这是静态的(所以你可以在不创建Activity对象的情况下调用它):

public static void show(Context ctx, String string1, int int1, boolean boolean1){
    Intent intent = new Intent(ctx, MyActivity.class);
    intent.putExtra("arg_string1", string1);
    intent.putExtra("arg_int1", int1);
    intent.putExtra("arg_boolean1", boolean1);
    ctx.startActivity(intent);
}   

从任何其他上下文(activity,fragment.getActivity(),service,...)我调用此show方法来打开活动。例如,从ListView的onListItemClick侦听器(以这种方式调用侦听器在ListActivity或ListFragment中工作):

@Override
public void onListItemClick(ListView listView, View view, int position,
        long id) {
    super.onListItemClick(listView, view, position, id);
      //Item with index = position has been clicked in listView
      MyActivity.show(this, item[position].name, item[position].number, item[position].mBoolean);
}

然后在MyActivity.onCreate()中调用:

String name = getIntent().getStringExtra("arg_string1");
int number = getIntent().getIntExtra("arg_int1");
boolean mBoolean = getIntent().getBooleanExtra("arg_boolean1");

看看Bundle类,您可以使用它在活动和片段之间传递数据。

答案 1 :(得分:0)

我真的没有得到你想说的东西,但从我所知道你需要一个列表点击它去另一个页面标题点击列表项目上的文字你想要创建列表上的监听器和单击事件你设置一个新的意图,你点击项目的名称 我建议您逐步学习这一系列的视频教程: http://www.youtube.com/watch?v=SUOWNXGRc6g&list=PL023BC9408BAFEC0C