0

我在一个活动中有 10 个图像按钮。单击每个按钮时都会在此布局中启动一个新活动,我希望有一个不填充完整布局的列表视图。所以我猜它必须是自定义的。

  package com.baha.beallhasall;

  import android.app.Activity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.ArrayAdapter;
  import android.widget.ImageButton;
    import android.widget.ListView;

    public class FirstActivityPage extends Activity implements OnClickListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act_one);
    ImageButton btn1 = (ImageButton)findViewById(R.id.imageButton1);
    ImageButton btn2 = (ImageButton)findViewById(R.id.imageButton2);
    ImageButton btn3 = (ImageButton)findViewById(R.id.imageButton3);
    ImageButton btn4 = (ImageButton)findViewById(R.id.imageButton4);
    ImageButton btn5 = (ImageButton)findViewById(R.id.imageButton5);
    ImageButton btn6 = (ImageButton)findViewById(R.id.imageButton6);
    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    btn3.setOnClickListener(this);
    btn4.setOnClickListener(this);
    btn5.setOnClickListener(this);
    btn6.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
         switch(v.getId()){
        case R.id.imageButton1:
            Intent intent0 = new Intent(FirstActivityPage.this, FourActivityPage.class);
            startActivity(intent0);
            break;
        case R.id.imageButton2:
            Intent intent1 = new Intent(FirstActivityPage.this, FourActivityPage.class);
            startActivity(intent1);
            break;
        case R.id.imageButton3:
            Intent intent2 = new Intent(FirstActivityPage.this, FiveActivityPage.class);
            startActivity(intent2);
            break;
        case R.id.imageButton4:
            Intent intent3 = new Intent(FirstActivityPage.this, SixActivityPage.class);
            startActivity(intent3);
            break;
        case R.id.imageButton5:
            Intent intent4 = new Intent(FirstActivityPage.this, SevenActivityPage.class);
            startActivity(intent4);
            break;
        case R.id.imageButton6:
            Intent intent5 = new Intent(FirstActivityPage.this, ThirdActivityPage.class);
            startActivity(intent5);
            break;
    }
   }

private void setListAdapter(ArrayAdapter<String> arrayAdapter) {
    // TODO Auto-generated method stub

}

private ListView getListView() {
    // TODO Auto-generated method stub
    return null;
}
     }

这是我的第一个活动,我的按钮有点击次数。是否可以在自己的类中而不是在这种情况下声明我的所有图像按钮活动的列表视图。因为我认为这是我在这里拥有的所有按钮的代码很好,但我真的不认为一个类应该处理所有这些代码。所以这是解决这个问题的最好方法。

http://img17.imageshack.us/img17/4936/0b8o.jpg这张图片只是我的项目布局。

http://img594.imageshack.us/img594/9373/a7l8.png这张图片是我试图用文字表达的,但由于我是这个代码世界的新手,所以更容易以这种方式向你们展示。

谢谢

新代码

      package com.example.testtest;

 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ArrayAdapter;
 import android.widget.ImageButton;
 import android.widget.ListView;

  public class MainActivity extends Activity implements OnClickListener{

  @Override
   protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layout_of_button);
  ImageButton btn1 = (ImageButton)findViewById(R.id.imageButton1);
  ImageButton btn2 = (ImageButton)findViewById(R.id.imageButton2);
  ImageButton btn3 = (ImageButton)findViewById(R.id.imageButton3);
  ImageButton btn4 = (ImageButton)findViewById(R.id.imageButton4);
  ImageButton btn5 = (ImageButton)findViewById(R.id.imageButton5);
  ImageButton btn6 = (ImageButton)findViewById(R.id.imageButton6);
  btn1.setOnClickListener(this);
  btn2.setOnClickListener(this);
  btn3.setOnClickListener(this);
  btn4.setOnClickListener(this);
  btn5.setOnClickListener(this);
  btn6.setOnClickListener(this);
   }

   @Override
   public void onClick(View v) {
    switch(v.getId()) {
    // if one of the image buttons is pressed...
    case R.id.imageButton1:
    case R.id.imageButton2:
    case R.id.imageButton3:
    case R.id.imageButton4:
    case R.id.imageButton5:
    case R.id.imageButton6:   
        Intent intent = new Intent(this, Listviewact.class);
        // pass ID of pressed button to listview-activity
        intent.putExtra("buttonId", v.getId());  
        startActivity(intent);
        break;
    // here you could place handling of other clicks if necessary...        
    }
    }

    private void setListAdapter(ArrayAdapter<String> arrayAdapter) {
      // TODO Auto-generated method stub

   }

    private ListView getListView() {
     // TODO Auto-generated method stub
     return null;
 }
      }

列表视图行为

        package com.example.testtest;

  import android.app.Activity;
  import android.os.Bundle;
  import android.widget.ArrayAdapter;
  import android.widget.ImageView;
  import android.widget.ListView;

   public class Listviewact extends Activity {

public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.listview_layout);
  }

  public void onResume() {
    super.onResume();
    int buttonId = getIntent().getIntExtra("buttonId", 0);
    int buttonIdx = getButtonIdx(buttonId);

    // find and set image according to buttonId
    int imageId = IMAGE_IDS[buttonIdx];        // image to show for given button
    ImageView imageView = (ImageView)findViewById(R.id.imageView1);
    imageView.setImageResource(imageId);

    // find and set listview imtes according to buttonId
    String[] items = LISTVIEW_DATA[buttonIdx]; // listview items to show for given button
    ListView listView = (ListView)findViewById(R.id.listView1);
    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, items);
    setListAdapter(adapter);
   }

    private void setListAdapter(ArrayAdapter adapter) {
    // TODO Auto-generated method stub

}

// a little helper to map ids to array indices 
   // to be able to fetch the correct image and listview data later
   private final static int[] BUTTON_IDS = new int[] {
    R.id.imageButton1, 
    R.id.imageButton2, 
    R.id.imageButton3, 
    R.id.imageButton4, 
    R.id.imageButton5, 
    R.id.imageButton6
  };

  // 6 images
  private final static int[] IMAGE_IDS = new int[] {
    R.drawable.ic_launcher,
    R.drawable.ic_launcher,
    R.drawable.ic_launcher,
    R.drawable.ic_launcher,
    R.drawable.ic_launcher,
    R.drawable.ic_launcher
  };

  // 6 different sets of strings for the listviews
   private final static String[][] LISTVIEW_DATA = new String[][] {
    {"First A", "First B", "First C"},
    {"Second A", "Second B", "Second C"},
    {"Third A", "Third B", "Third C"},
    {"Forth A", "Forth B", "Forth C"},
    {"Fifth A", "Fifth B", "Fifth C"},
    {"Sixth A", "Sixth B", "Sixth C"},
   };

   // map button id to array index
  static private int getButtonIdx(int id) {
    for(int i = 0; i<BUTTON_IDS.length; i++) {
        if (BUTTON_IDS[i] == id) return i;
    }
    return 0;    // should not happen
   }
   }

列表视图 xml

         <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="55dp"
    android:src="@drawable/ic_launcher" />

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/imageView1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="125dp" >
  </ListView>

  </RelativeLayout>

我开始了这个新项目,因为我不想搞砸我的其他项目。我希望很接近,但是当我点击第一个图像按钮时没有任何反应。

http://img836.imageshack.us/img836/1549/jo81.jpg LOGCAT

4

1 回答 1

0

你想要达到的形象是一个好主意。

我建议您只有一秒钟的活动来显示您的布局,顶部是图像,底部是列表视图。您可以从您的第一个(图像按钮)活动将有关要显示的图像和要在列表视图中显示的数据的信息传递给该活动。这是通过使用putExtra()方法将信息放入 Intent 对象来完成的。

然后在第二个活动中,您从 中读取该信息Intent并通过设置图像和初始化 Listview 的适配器来采取相应的行动。

顺便说一句,您不需要自定义ListView该布局,只需使用 aLinearLayout并将 aImageView和 aListView放入其中。

示例代码

我添加了一些示例代码,应该解释如何做到这一点。它没有经过测试,所以很可能有错别字或遗漏,但它至少应该给你一个开始和一个想法。

主要活动

在您的主要活动中执行此操作,将按下按钮的 ID 传递给列表视图活动。

public void onClick(View v) {
    switch(v.getId()) {
    // if one of the image buttons is pressed...
    case R.id.imageButton1:
    case R.id.imageButton2:
    case R.id.imageButton3:
    case R.id.imageButton4:
    case R.id.imageButton5:
    case R.id.imageButton6:   
        Intent intent = new Intent(this, MyListViewActivity.class);
        // pass ID of pressed button to listview-activity
        intent.putExtra("buttonId", v.getId());  
        startActivity(intent);
        break;
    // here you could place handling of other clicks if necessary...        
    }
}

MyListViewActivity

这将是您的第二个活动,我在这里称之为 ListViewActivity。在 onResume() 中,我们检查 Intent 中的额外数据(任何 Activity 都有一个启动它的 Intent)。

public MyListViewActivity extends Activity {

    public void onCreate(Bundle b) {
        super.onCreate(b);
        setContentView(R.layout.activity_mylistview);
    }

    public void onResume() {
        super.onResume();
        int buttonId = getIntent().getIntExtra("buttonId", 0);
        int buttonIdx = getButtonIdx(buttonId);

        // find and set image according to buttonId
        int imageId = IMAGE_IDS[buttonIdx];        // image to show for given button
        ImageView imageView = (ImageView)findViewById(R.id.imageView);
        imageView.setImageResource(imageId);

        // find and set listview imtes according to buttonId
        String[] items = LISTVIEW_DATA[buttonIdx]; // listview items to show for given button
        ListView listView = (ListView)findViewById(R.id.listView);
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, items);
        listView.setListAdapter(adapter);
    }

    // a little helper to map ids to array indices 
    // to be able to fetch the correct image and listview data later
    private final static int[] BUTTON_IDS = new int[] {
        R.id.imageButton1, 
        R.id.imageButton2, 
        R.id.imageButton3, 
        R.id.imageButton4, 
        R.id.imageButton5, 
        R.id.imageButton6
    };

    // 6 images
    private final static int[] IMAGE_IDS = new int[] {
        R.drawable.image1,
        R.drawable.image2,
        R.drawable.image3,
        R.drawable.image4,
        R.drawable.image5,
        R.drawable.image6
    };

    // 6 different sets of strings for the listviews
    private final static String[][] LISTVIEW_DATA = new String[][] {
        {"First A", "First B", "First C"},
        {"Second A, "Second B", Second C"},
        {"Third A, "Third B", Third C"},
        {"Forth A, "Forth B", Forth C"},
        {"Fifth A, "Fifth B", Fifth C"},
        {"Sixth A, "Sixth B", Sixth  C"},
    };

    // map button id to array index
    static private int getButtonIdx(int id) {
        for(int i = 0; i<BUTTON_IDS.length; i++) {
            if (BUTTON_IDS[i] == id) return i;
        }
        return 0;    // should not happen
    }
}

* activity_mylistview.xml*

您在第二张图片中想要的布局的一个简单示例,您需要改进它。

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
>
    <ImageView
       android:id="imageView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
    />
    <ListView
       android:id="listView"
       android:layout_width="fill_parent"
       android:layout_height="0dp"
       android:layout_weight="1"
    />
</LinearLayout>
于 2013-07-04T19:15:48.173 回答