0

我正在创建我的第一个 Android 应用程序,但不幸的是我卡住了。该应用程序将非常简单:在起始页面上有一个 ListView,其中包含以下项目:第 1 组 第 2 组 第 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
        }

    });

  }

}

谢谢你的帮助。

4

3 回答 3

0

我假设您的 R.layout.main 持有一个列表视图和一个线性布局,其 ID 分别为 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>

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

如果您的 R.layout.main 没有使用 RelativeLayout 作为根节点,而是使用 LinearLayout 如果您希望隐藏它,您应该仍然可以通过将 Visibilities 设置为 View.GONE 来实现相同的效果,并查看.VISIBLE 如果你想让它显示。

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

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

希望这可以帮助。

于 2012-08-23T18:43:20.933 回答
0

您是否尝试过在 onItemClick() 方法中显示 toast 消息或设置断点以验证它没有被到达?我的猜测是,您遇到了此处描述的问题之一:

添加视图后刷新 LinearLayout

于 2012-08-23T18:21:13.753 回答
0

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

一旦点击发生,就会开始一个新的活动,如下所示:

mainListView.setOnItemClickListener(new OnItemClickListener() {

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

}

您显然需要定义第二个活动并定义其相应的布局文件。同样在第二个活动中查找如何从第一个活动中获取捆绑包和附加内容以获取 textToPass 字符串

于 2012-08-23T18:52:20.987 回答