Android - 单击列表视图项显示textview

时间:2012-08-23 18:16:22

标签: android listview textview

我正在创建我的第一个Android应用程序,但不幸的是我卡住了。应用程序非常简单:在起始页面上有一个ListView,其中包含以下项目: 第一组 第二组 第3组 ...

通过单击这些项目中的任何一项,新页面将显示一个具有某些描述的textview元素。就像您单击“第一组”项目一样,列表视图将被隐藏,并显示一个带有“第一组描述”文本的新页面。

到目前为止,我可以显示列表视图中的项目,但是当我点击它们时,没有任何反应(我想我会错过一些基本的东西,但作为一个非常新的,我无法轻易找到它。)

import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;
import android.view.*;

public class SimpleListViewActivity extends Activity {
    LinearLayout.LayoutParams layoutParams;
    LinearLayout ll;


  private ListView mainListView ;
  private ArrayAdapter<String> listAdapter ;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Find the ListView resource. 
    mainListView = (ListView) findViewById( R.id.mainListView );

    // populate the List of groups
    String[] GROUP = getResources().getStringArray(R.array.group);  
    ArrayList<String> GrList = new ArrayList<String>();
    GrList.addAll( Arrays.asList(GROUP) );

    // Create ArrayAdapter using the list.
    listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, GrList);

    // Set the ArrayAdapter as the ListView's adapter.
    mainListView.setAdapter( listAdapter );  
    ll = (LinearLayout)findViewById(R.id.LinearLayout);
    layoutParams = new LinearLayout.LayoutParams
    (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    mainListView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            TextView t = (TextView) findViewById(R.id.textView1);
            String[] DESC = getResources().getStringArray(R.array.desc); 
            t.setText(DESC[position]);
            ll.addView(t);
        //This is the point that is wrong for sure (and others maybe also). I cannot get the textview shown
        }

    });

  }

}

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您是否尝试在onItemClick()方法中显示Toast消息或设置断点以验证其未到达?我的猜测是,它正在遇到这里描述的问题之一:

Refreshing a LinearLayout after adding a view

答案 1 :(得分:0)

我假设你的R.layout.main分别持有一个listview和一个带有ids R.id.mainListView和R.id.LinearLayout的线性布局。

示例:我省略了一些您需要的明显属性,如高度宽度等。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      >
      <ListView android:id="@+id/mainListView" />
      <LinearLayout android:id="@+id/LinearLayout" />
 </RelativeLayout>

在单击项目中,您要做的就是添加一个textview,然后设置mainListView.setVisibility(View.INVISIBLE)和ll.setVisibility(View.VISIBLE)。

如果你的R.layout.main没有使用RelativeLayout作为根节点,而是使用LinearLayout,你仍然可以通过设置Visibility to View.GONE来实现相同的效果,如果你想隐藏它和View.VISIBLE,如果你想要它显示。

要恢复为能够查看列表视图,我将覆盖活动中的onBackPressed(),以反转这两个项目的可见性。还要记住从线性布局中删除所有视图,以便下次选择组中的项目时,它将是添加时线性布局中的唯一项目。

有更简单的方法可以实现此目的,例如启动新活动以查看下一个项目,但似乎您将所有内容保留在一个活动中。我还会考虑使用ListActivity而不是基本活动类。

希望这有帮助。

答案 2 :(得分:0)

首先停止使用单词页面。称之为活动(必须让你进入Android专区)

点击发生后,启动一项新活动:

mainListView.setOnItemClickListener(new OnItemClickListener() {

String textToPass = GrList.get(position)
Intent i = new Intent(getBaseContext(), SecondActivity.class);                      
i.putExtra("textToPass", textToPass);
startActivity(i);

}

显然,您需要定义第二个活动及其相应的布局文件。同样在第二个活动中查找如何从第一个活动中获取bundle和extras以获取textToPass String