如何实现可点击列表视图并在不同的片段布局中显示列表详细信息?

时间:2014-09-03 12:37:36

标签: android listview android-fragments

我设法开发列表视图。我不知道如何使其可点击并在不同的布局页面中显示点击的列表详细信息。给我一个解决方案来实现这一目标。 这是我的 MainActivity.java

import android.app.ListActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;
    import android.widget.Toast;
    import android.app.Activity;



    public class ActivityList extends Activity {
        ListView list;
        String[] web = {
                "Design",
                "Centers",
                "Products",
                "Search",
                "Clients",
                "About Us"

        } ;
        Integer[] imageId = {
                R.drawable.ic_sws,
                R.drawable.ic_centers,
                R.drawable.ic_pc,
                R.drawable.ic_fmc,
                R.drawable.ic_person,
                R.drawable.ic_bhs,

        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.homelist);
            CustomList adapter = new CustomList(ActivityList.this, web, imageId);
            list=(ListView)findViewById(R.id.list);
            list.setAdapter(adapter);
            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {
                   Toast.makeText(ActivityList.this, "You Clicked at " + web[+position], Toast.LENGTH_SHORT).show();

                }

    });
        }
    }

这是 CustomList.java

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;


public class CustomList extends ArrayAdapter<String>{
    private final Activity context;
    private final String[] web;
    private final Integer[] imageId;
    public CustomList(Activity context,
                      String[] web, Integer[] imageId) {
        super(context, R.layout.list_single, web);
        this.context = context;
        this.web = web;
        this.imageId = imageId;
    }
    @Override
    public View getView(int position, View view, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView= inflater.inflate(R.layout.list_single, null, true);
        TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
        txtTitle.setText(web[position]);
        imageView.setImageResource(imageId[position]);
        return rowView;
    }
}

她是 homelist.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">


    <ListView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </ListView>
</RelativeLayout>

这里是 list_single.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TableRow>
        <ImageView
            android:id="@+id/img"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:paddingLeft="7dp"/>
        <TextView
            android:id="@+id/txt"
            android:layout_width="wrap_content"
            android:layout_height="55dp"
            android:paddingLeft="16dp"
            android:paddingTop="12dp"
            android:textSize="18dp"
            android:textAlignment="viewEnd"

            />


    </TableRow>

</TableLayout>

2 个答案:

答案 0 :(得分:0)

使点击视图很容易,如下所示;

yourView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            //Do something here

        }
    });

在您的情况下,您可以使您的imageViews和textViews可单击。或者,您可以将它们包装在一个按钮中,并使它们完全可点击。由于在自定义列表适配器中,您具有position参数,因此您可以访问相关列表项的信息。

答案 1 :(得分:0)

如果要在另一个布局中显示信息,有两种主要方法。第一个是使用带有自定义布局的对话框,第二个是启动传递所需参数的新活动。这是细节;

1-自定义对话框;

您可以创建默认对话框并显示信息。但是如果你想要进一步的布局风格,你应该使用自定义对话框。为此,您需要首先创建一个XML文件。在您的情况下,您可能需要像这样的ImageView和TextView;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Text" />

然后,您必须创建一个对话框,自定义它的布局,并传递相关参数。您可以在列表的onItemClickListener中执行此操作。 arg2参数是您在列表中单击的位置。所以在侦听器中添加此代码而不是toast;

    Dialog dialogBox= new Dialog(MainActivity.this);
    dialogBox.setContentView(R.layout.custom_layout);
    dialogBox.setTitle("Info");
    TextView text = (TextView) dialog.findViewById(R.id.text);
    text.setText(web[arg2]);
    ImageView image = (ImageView) dialog.findViewById(R.id.image);
    image.setImageResource(imageId[arg2]);
    dialogBox.show();

2-开始新活动

您必须创建新的活动和布局,并传递参数。您可以简单地使用上面相同的布局,并按如下方式添加活动;

public class Info extends ActionBarActivity {
ImageView imageView;
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.custom_layout);
    imageView = (ImageView) findViewById(R.id.image);
    textView = (TextView) findViewById(R.id.text);
}

}

这里有主要技巧。在列表项的侦听器中,您必须创建Intent,传递Bundle,然后启动此活动。在激活中,你必须ob the Bundle,并相应地设置视图。您可以按照以下步骤创建意图,传递包并创建活动;

Intent mIntent = new Intent(MainActivity.this, Info.class);
            Bundle mBundle = new Bundle();

            mBundle.putInt("img", imageId[arg2]);
            mBundle.putInt("txt", web[arg2]);
            mIntent.putExtras(mBundle);

            startActivity(mIntent);

但是要小心,在运行上面的代码之前,必须修改此活动以获取Bunde并设置Views。在我们创建的Info活动中,有一个imageView和textView。您可以按如下方式获取包值;

String text = (String) getIntent().getExtras("txt");
int resId= (int) getIntent().getExtras("img");

然后你只需要将这些资源设置为Views;

textView.setText(text);
imageView.setImageResource(resId);

那就是!!现在您可以安全地开始此活动。希望你有主要的逻辑。