从列表视图中打开不同的活动

时间:2014-04-05 04:26:03

标签: android eclipse listview android-listview

我想为每个listview项打开一个活动。做了一些关于onitemclickListener的研究但是不太了解如何适应我当前的代码。

我的活动叫做:

  1. BhutanInfo.java

  2. ColumbiaInfo.java

  3. 我的列表视图在xml文件中设置:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string-array name="country_names">
        <item>Bhutan</item>
        <item>Colombia</item>
    </string-array>
    <array name="country_icons">
        <item>@drawable/bhutan</item>
        <item>@drawable/colombia</item>
    </array>
    </resources>
    

    在我的班级档案中,我有以下内容:

        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        Context ctx = getApplicationContext();
    Resources res = ctx.getResources();
    
    String[] options = res.getStringArray(R.array.country_names);
    TypedArray icons = res.obtainTypedArray(R.array.country_icons);
    
    setListAdapter(new ImageAndTextAdapter(ctx, R.layout.main_list_item, options, icons));
    }
    

    我还有另一个设置适配器的类。

    public class ImageAndTextAdapter extends ArrayAdapter<String> {
    
    private LayoutInflater mInflater;
    
    private String[] mStrings;
    private TypedArray mIcons;
    
    private int mViewResourceId;
    
    public ImageAndTextAdapter(Context ctx, int viewResourceId,
            String[] strings, TypedArray icons) {
        super(ctx, viewResourceId, strings);
    
        mInflater = (LayoutInflater)ctx.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
    
        mStrings = strings;
        mIcons = icons;
    
        mViewResourceId = viewResourceId;
    }
    
    @Override
    public int getCount() {
        return mStrings.length;
    }
    
    @Override
    public String getItem(int position) {
        return mStrings[position];
    }
    
    @Override
    public long getItemId(int position) {
        return position;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = mInflater.inflate(mViewResourceId, null);
    
        ImageView iv = (ImageView)convertView.findViewById(R.id.option_icon);
        iv.setImageDrawable(mIcons.getDrawable(position));
    
        TextView tv = (TextView)convertView.findViewById(R.id.option_text);
        tv.setText(mStrings[position]);
    
        return convertView;
    }
    

    任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

在这种情况下,您使用自定义适配器,我是对的。

这样您就可以管理自定义适配器中的点击侦听器

如果您不想要这种情况,那么您必须

 android:focusableInTouchMode="false"

在xml文件中的自定义列表行中,然后调用listview onclick listener它将起作用。

答案 1 :(得分:0)

如果你只有两个项目意味着你可以根据位置重定向活动,你可以这样做

listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            String str = parent.getItemAtPosition(position).toString();
            Log.e("Clicked Value is", str);

            if(str.equals("<Your Class Name>")){
                startActivity(new Intent(MainActivity.this,
                        FirstActivity.class);
            }else{

                startActivity(new Intent(MainActivity.this,
                        Second.class);

            }


        }
    });

答案 2 :(得分:0)

ActivityClass中,让listView实施onItemClickListener

listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

        String value = options[position];

        if(value.equals("Bhutan")){
            Intent intent = new Intent(CurrentActivity.this, BhutanInfo.class);
            startActivity(intent);
        }else if(value.equals("Columbia")){
             intent = new Intent(CurrentActivity.this, ColumbiaInfo.class);
             startActivity(intent);
        }
    }
});

P.S:确保BhutanInfoColumbiaInfo正在延长Activity。 在行布局中,为listview设置focusablefocusableInTouchMode false,为其中的所有元素充气。