-1

我目前正在使用列表视图,但这对我不起作用,所以我希望使用表格视图和行来实现相同的效果。例如,我有一个 json 提要和新闻故事,并且为每个新闻故事创建一个包含图像和 textview 的行,并用来自 json 的数据填充它。

所以我的问题是有没有人知道我如何做到这一点的方法?

这是我到目前为止所拥有的:

<?xml version="1.0" encoding="utf-8"?>


<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white">

   <include layout="@layout/header" />
   <include layout="@layout/redcell" />

   <TableRow

       android:id="@+id/tableRow1"
       android:layout_width="wrap_content"
       android:layout_height="100dp" >


      <TextView

        android:id="@+id/fixtures_text"
        android:layout_width="match_parent"
        android:layout_height="60dp"

        android:gravity="center"
        android:text="@string/leagues"
        android:textColor="@color/white"
        android:textSize="25dp"
        android:textStyle="bold"/>




   </TableRow>

   <include layout="@layout/redcell" />

   <TableRow
       android:id="@+id/tableRow2"
       android:layout_width="wrap_content"
       android:layout_height="100dp" >


      <TextView

        android:id="@+id/_text"
        android:layout_width="match_parent"
        android:layout_height="60dp"

        android:gravity="center"
        android:text="@string/leagues"
        android:textColor="@color/white"
        android:textSize="25dp"
        android:textStyle="bold"/>

   </TableRow>

    <include layout="@layout/redcell" />

活动:

public class HomeActivity extends ListActivity {

    private static final String apiKey = "67htj4455jsd345jj956id"; 
    private static final String apiUser = "android";
    private static final String ChosenTeam = null;
    private static String ChosenMethod = null; 
    public String fulldata = null;
    public String chosenLeagueId = "40";
    public List<String> newsList = null;
    public int newsAmount = 0;
    private static final String ChosenMethodPref = null;





    long unixTimeStamp = System.currentTimeMillis() / 1000L;

    //add Time Stamp to URL


    //public String chosenMethod; 


    String newsFeedRequest = "1.0/website/" + chosenLeagueId + "/news?timestamp=" + unixTimeStamp;
    String fixturesFeedURL = "https://www.example.com/_services/api/" + newsFeedRequest;


    private static String buildHmacSignature(String pKey, String pStringToSign)
    {
      String lSignature = "None";
      try
      {
        Mac lMac = Mac.getInstance("HmacSHA256");
        SecretKeySpec lSecret = new SecretKeySpec(pKey.getBytes(), "HmacSHA256");
        lMac.init(lSecret);

        byte[] lDigest = lMac.doFinal(pStringToSign.getBytes());
        BigInteger lHash = new BigInteger(1, lDigest);
        lSignature = lHash.toString(16);
        if ((lSignature.length() % 2) != 0) {
          lSignature = "0" + lSignature;
        }
      }
      catch (NoSuchAlgorithmException lEx)
      {
        throw new RuntimeException("Problems calculating HMAC", lEx);
      }
      catch (InvalidKeyException lEx)
      {
        throw new RuntimeException("Problems calculating HMAC", lEx);
      }

      return lSignature;
    }


    public void checkPreferences(){


        SharedPreferences preferences = getSharedPreferences("prefs", Context.MODE_PRIVATE);
        final String ChosenMethodPref = preferences.getString("ChosenMethod", ChosenMethod);
        Log.v("myapp", "ChosenMethod Home = " + ChosenMethodPref);

         if (ChosenMethodPref.equals("Team")) {
             setContentView(R.layout.homeactteam);
             newsAmount = 5;
             TextView redHeaderText = (TextView) findViewById(R.id.redheadertext);
             redHeaderText.setText("Latest League Fixture");



         } else {
             setContentView(R.layout.homeact);
             newsAmount = 10;

         }

}
    public void loadData(){String myhash = buildHmacSignature(apiKey, fixturesFeedURL);





    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(fixturesFeedURL);

    List<NameValuePair> pairs = new ArrayList<NameValuePair>();
    pairs.add(new BasicNameValuePair("requestToken", myhash));
    pairs.add(new BasicNameValuePair("apiUser", apiUser));

    try {
        post.setEntity (new UrlEncodedFormEntity(pairs));
        HttpResponse response = client.execute(post);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
        String json = reader.readLine();
        fulldata = String.valueOf(json);
        Log.v("myApp","newsdata" + fulldata);
        newsList = new ArrayList<String>();
        JSONObject obj = new JSONObject(json);    
        JSONObject objData = obj.getJSONObject("data");
        JSONArray jArray = objData.getJSONArray("news");


           for(int t = 0; t < newsAmount; t++){
               JSONObject newsTitleDict = jArray.getJSONObject(t);


               newsList.add(newsTitleDict.getString("title"));

           }


    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    setListAdapter ( new ArrayAdapter<String>(this, R.layout.single_item, newsList));

       ListView list = getListView();

        list.setTextFilterEnabled(true);



    }   


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        checkPreferences();
        loadData();


        Button backbtn = (Button) findViewById(R.id.backbtn);

        //Listening to button event
        backbtn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                //Starting a new Intent
                Intent previousScreen = new Intent(getApplicationContext(), ChooseTeamActivity.class);
                ChosenMethod = "null";
                SharedPreferences preferences = getSharedPreferences("prefs", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("ChosenMethod", ChosenMethod);            
                editor.commit();
                previousScreen.putExtra("FullData", fulldata);
                startActivity(previousScreen);


            }
        });




    }











@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == R.id.home) {

        startActivity(new Intent(HomeActivity.this, HomeActivity.class));

        return(true);
  }


    if (item.getItemId() == R.id.match) {

        startActivity(new Intent(HomeActivity.this, MatchActivity.class));

        return(true);
  }



    if (item.getItemId() == R.id.teams) {

        startActivity(new Intent(HomeActivity.this, TeamsActivity.class));

        return(true);
  }



    if (item.getItemId() == R.id.twitter) {

        startActivity(new Intent(HomeActivity.this, TwitterActivity.class));

        return(true);
  }

    if (item.getItemId() == R.id.info) {

        startActivity(new Intent(HomeActivity.this, InfoActivity.class));

        return(true);
  }


    return(super.onOptionsItemSelected(item));


}



}
4

1 回答 1

0

您可以将扩展 ArrayAdapter 的自定义适配器设置为 ListActivity 使用的适配器。在该自定义适配器的 getView() 方法中,您可以为 newsList 中的每个项目加载图像和文本。

具有水平方向的简单 LinearLayout 可能最适合自定义适配器中的行布局。如果您将 TextView 的 layout_weight 设置为 1 并留下没有 layout_weight 的图像,这会将您的图像推到行的一侧。

于 2012-05-10T14:43:36.540 回答