【问题标题】:Android - Show textview by clicking on listview itemAndroid - 通过单击列表视图项目显示文本视图
【发布时间】:2012-08-24 02:52:20
【问题描述】:

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

点击这些项目中的任何一个,都会出现一个新页面,其中包含一个带有一些描述的 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
        }

    });

  }

}

感谢您的帮助。

【问题讨论】:

  • 您的TextView 可见吗?发布您的XML 文件。
  • 您正在创建的 layoutParams 怎么样,它们没有在您发布的代码中使用,您应该将 layoutparams 留在要从中检索视图的 xml 中。

标签: android listview textview


【解决方案1】:

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

Refreshing a LinearLayout after adding a view

【讨论】:

    【解决方案2】:

    我假设你的 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 来实现相同的效果(如果您希望它隐藏) , 和 View.VISIBLE 如果你想显示它。

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      首先停止使用页面一词。称其为活动(让您进入 Android 专区)

      点击后开始一个新的活动,如下所示:

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

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

      【讨论】:

        猜你喜欢
        • 2014-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-26
        • 2015-02-04
        • 1970-01-01
        相关资源
        最近更新 更多